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?
Sie können zu diesem Zweck die statische Methode HashSet<T>.CreateSetComparer
verwenden.
%Vor%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.
(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:
Und so würden Sie beide Sets unter einem Dach gruppieren:
%Vor%