Как вы определяете, равны ли два HashSets (по значению, а не по ссылке)? - PullRequest
46 голосов
/ 30 января 2009

Я пытаюсь определить, являются ли два 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()?

Ответы [ 2 ]

84 голосов
/ 30 января 2009

Посмотрите на метод SetEquals .

my_hashset.SetEquals(other);
4 голосов
/ 24 апреля 2014
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);
...