web-dev-qa-db-ja.com

2つのHashSetが等しいかどうかをどのように判断しますか(参照ではなく値で)?

.NET 3.5(C#)の2つのHashSetオブジェクトが等しいセットであるかどうか、つまりに同じ値が含まれているかどうかを判断しようとしています。これは明らかにやりたいことのように思えますが、提供されている関数のどれもこの情報を提供していないようです。

これを行うために私が考えることができる方法は、2つのセットの数が等しいかどうかをチェックすることですそして一方のセットはもう一方のサブセット(適切ではありません)です。起こり得る唯一の方法は、それらが等しいセットである場合だと思います。コード例:

_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
}
_

これは常に機能しますか?もっと良い方法はありますか? HashSetpublic bool IsEqualSetWith()関数がないのはなぜですか?

49
Craig W

メソッドを見てください SetEquals

my_hashset.SetEquals(other);
87
Michael Burr
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);
4
Gregory Adam