Как вы определяете, равны ли два хэш-набора (по значению, а не по ссылке)?
Вопрос
Я пытаюсь определить, являются ли два 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);
Не связан с StackOverflow