Come si determina se due Hashset sono uguali (per valore, non per riferimento)?
Domanda
Sto cercando di determinare se due HashSet
oggetti in .NET 3.5 (C #) sono insiemi uguali, vale a dire contengono gli stessi valori. Questo sembra qualcosa che uno vorrebbe ovviamente fare, ma nessuna delle funzioni fornite sembra darti queste informazioni.
Il modo in cui posso pensare di farlo è controllando se il conteggio dei due set è uguale e un set è un sottoinsieme (non proprio) dell'altro. Penso che l'unico modo in cui può succedere sia se sono serie uguali. Codice di esempio:
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
}
Funzionerebbe sempre? Esiste un modo migliore? Perché public bool IsEqualSetWith()
non ha una funzione <=>?
Soluzione
Guarda il metodo SetEquals .
my_hashset.SetEquals(other);
Altri suggerimenti
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);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow