Wie bestimmen Sie, wenn zwei HashSets gleich sind (nach Wert, nicht Bezug genommen wird)?
Frage
Ich versuche, um zu bestimmen, ob zwei HashSet
in Objekte .NET 3.5 (C #) gleich sind Sätze, d. enthält die gleichen Werte. Dies scheint wie etwas würde man offensichtlich tun wollen, aber keiner der zur Verfügung gestellten Funktionen scheinen Sie diese Informationen zu geben.
So wie ich denken kann, dies zu tun ist, indem geprüft wird, ob die Zählung der beiden Sätze gleich sind und ein Satz eine Teilmenge (nicht im eigentlichen Sinne) von der anderen Seite. Ich denke, der einzige Weg, was passieren kann, ist, wenn sie gleich Sets sind. Beispielcode:
HashSet<int> set1 = new HashSet<int>();
set1.Add(1);
set1.Add(2);
set1.Add(3);
HashSet<int> set2 = new HashSet<int>();
set2.Add(1);
set2.Add(2);
set2.Add(3);
if(set1.Count == set2.Count && set1.IsSubsetOf(set2))
{
// do something
}
Wäre das immer? Gibt es einen besseren Weg? Warum HashSet
keine public bool IsEqualSetWith()
Funktion haben?
Lösung
Sehen Sie sich die Methode SetEquals .
my_hashset.SetEquals(other);
Andere Tipps
IEqualityComparer<HashSet<int>> comp = HashSet<int>.CreateSetComparer();
Console.WriteLine("CreateSetComparer set1 == set2 : {0}", comp.Equals(set1, set2));
// or
bool areEqual = HashSet<int>.CreateSetComparer().Equals(set1, set2);