Как вы определяете, равны ли два хэш-набора (по значению, а не по ссылке)?

StackOverflow https://stackoverflow.com/questions/494224

Вопрос

Я пытаюсь определить, являются ли два HashSet объекты в .NET 3.5 (C #) являются равными наборами, т. е. содержат те же значения.Это похоже на то, что, очевидно, хотелось бы сделать, но ни одна из предоставленных функций, похоже, не дает вам этой информации.

Способ, которым я могу это сделать, - проверить, равно ли количество двух наборов и один набор является подмножеством (не собственным) другого.Я думаю, что единственный способ, которым это может произойти, - это если они будут равными наборами.Пример кода:

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
}

Всегда ли это будет работать?Есть ли лучший способ?Почему не HashSet иметь public bool IsEqualSetWith() функция?

Это было полезно?

Решение

Посмотрите на этот метод Установленные значения.

my_hashset.SetEquals(other);

Другие советы

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);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top