我正在尝试为HashSet编写一个Generic IEqualityComparer,这样当且仅当它们的元素匹配时,两个set才是等号。
所以,Equals看起来像:
public bool Equals(HashSet<T> A, HashSet<T> B)
{
return (A.All(x => B.Contains(x)) && B.All(x => A.Contains(x)));
}
我在找到一个好的GetHashCode方法时遇到了很多麻烦。我知道
public int GetHashCode(HashSet<int> obj)
{
return 1;
}
总是一个选择,但我希望有更好的东西。有谁知道如何做到这一点?在每个元素上使用ToString,对它们进行排序和连接,并获得结果字符串的哈希码是个坏主意吗?
答案 0 :(得分:1)
IEqualityComparer<T> Interface
抽象了这里所需的操作集:
Equals
GetHashode
您可以像所有.NET类一样获取默认比较器:使用EqualityComparer<T>.Default Property
但是,我的理解是HashSet<>
的策略是使用与您调用操作的对象关联的Comparer
,即使它将另一个HashSet作为参数。