Como você determina se dois HashSets são iguais (por valor, não por referência)?
Pergunta
Eu estou tentando determinar se dois HashSet
objetos no .NET 3.5 (C #) são conjuntos iguais, i. contêm os mesmos valores. Este parece ser algo que seria, obviamente, quer fazer, mas nenhuma das funções fornecidas parecem dar-lhe essa informação.
A maneira que eu posso pensar de fazer isso é verificando se a contagem dos dois conjuntos são iguais e um conjunto é um subconjunto (não adequada) do outro. Eu acho que a única maneira que pode acontecer é se eles são conjuntos iguais. Código Exemplo:
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
}
Será que isso sempre funciona? Existe uma maneira melhor? Por HashSet
não tem uma função public bool IsEqualSetWith()
?
Solução
Olhe para o método SetEquals .
my_hashset.SetEquals(other);
Outras dicas
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);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow