C# 通用HashSet的GetHashCode方法<;T>;
我正试图为一个哈希集编写一个通用的IEqualityComparer,这样两个集在元素匹配时才相等 因此,Equals将类似于:C# 通用HashSet的GetHashCode方法<;T>;,c#,generics,hash,C#,Generics,Hash,我正试图为一个哈希集编写一个通用的IEqualityComparer,这样两个集在元素匹配时才相等 因此,Equals将类似于: public bool Equals(HashSet<T> A, HashSet<T> B) { return (A.All(x => B.Contains(x)) && B.All(x => A.Contains(x))); } public bool Equals(哈希集
public bool Equals(HashSet<T> A, HashSet<T> B)
{
return (A.All(x => B.Contains(x)) && B.All(x => A.Contains(x)));
}
public bool Equals(哈希集A、哈希集B)
{
返回(A.All(x=>B.Contains(x))&&B.All(x=>A.Contains(x));
}
我很难找到一个好的GetHashCode方法。我知道
public int GetHashCode(HashSet<int> obj)
{
return 1;
}
public int GetHashCode(HashSet obj)
{
返回1;
}
这永远是一个选择,但我想要比这更好的。有人知道我该怎么做吗?在每个元素上使用ToString,对它们进行排序和联接,并获取结果字符串的哈希代码,这是一个坏主意吗?摘要包含此处所需的一组操作:
等于
GetHashode
但是,据我所知,
HashSet
具有使用与调用操作的对象关联的比较器的策略,即使它将另一个HashSet作为参数。对于Equals
,使用返回A.SetEquals(B)更简单代码>。您可以检查IEqualityComparer执行的操作,该操作由@dtb伟大的注释返回(几乎可以是答案本身)。