Ist es möglich, eine Gruppe von Werten mit linq zu gruppieren?

8

Ich weiß, wie es möglich ist, anonyme Typen nach einer festen Liste von Werten zu gruppieren. Was ich tun möchte, ist nach einer Gruppe von Werten zu gruppieren.

Zum Beispiel ist das Ergebnis dieses Ausdrucks 2.

%Vor%

Ich suche nach einer Möglichkeit, diese Mengen in die gleiche Gruppe zu setzen, so dass das Ergebnis 1 wäre. In python würde dies mit frozenset erreicht werden.

Was ist der sauberste Weg, dies zu tun?

    
recursive 02.08.2012, 15:19
quelle

3 Antworten

8

Sie können zu diesem Zweck die statische Methode HashSet<T>.CreateSetComparer verwenden.

  

Rückgabewert

     

Typ: System.Collections.Generic.IEqualityComparer & gt; Ein   IEqualityComparer-Objekt, das für das Testen der tiefen Gleichheit von verwendet werden kann   das HashSet-Objekt.

%Vor%     
Ani 02.08.2012, 15:45
quelle
3

(Ich gehe davon aus, dass Sie beide Sets als "gleich" gruppieren wollen - die Frage ist nicht besonders klar)

Wie es bei LINQ oft der Fall ist, existiert das Gerüst, um dies zu erreichen, und was getan werden muss, ist, eine benutzerdefinierte IEqualityComparer<T> an die entsprechende Methode zu liefern. In diesem Fall bedeutet dies, diese Überladung zu verwenden.

Hier ist eine generische IEqualityComparer<ISet<T>> , die zwei Mengen gleich definiert, wenn ihre Schnittmenge die gleiche Menge wie die beiden ist:

%Vor%

Und so würden Sie beide Sets unter einem Dach gruppieren:

%Vor%     
Jon 02.08.2012 15:40
quelle
0
%Vor%     
M. Mennan Kara 02.08.2012 15:34
quelle

Tags und Links