Подтвердить что ты не робот

Как вы определяете, являются ли два HashSets равными (по значению, а не по ссылке)?

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

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

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()?

4b9b3361

Ответ 1

SetEquals()?

Ответ 2

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);