我想知道如何为有序列表编写好的 GetHashCode()
I'd like to know how can I write good GetHashCode() for ordered list
我制作了一个包含 List<T>
的 class。(T
是我制作的结构。)我想覆盖 Equals()
和 GetHashCode()
.所以我需要从 List<T>
生成 HashCode。如何从有序列表中生成好的 HashCode?
Jon Skeet 提供了一个类似的很好的例子 post:
public override int GetHashCode()
{
unchecked
{
int hash = 19;
foreach (var foo in foos)
{
hash = hash * 31 + foo.GetHashCode();
}
return hash;
}
}
素数在散列时通常非常有用。如果你有兴趣知道为什么,你必须查阅数学,因为人们很可能比我更擅长解释这一点。
我制作了一个包含 List<T>
的 class。(T
是我制作的结构。)我想覆盖 Equals()
和 GetHashCode()
.所以我需要从 List<T>
生成 HashCode。如何从有序列表中生成好的 HashCode?
Jon Skeet 提供了一个类似的很好的例子 post:
public override int GetHashCode()
{
unchecked
{
int hash = 19;
foreach (var foo in foos)
{
hash = hash * 31 + foo.GetHashCode();
}
return hash;
}
}
素数在散列时通常非常有用。如果你有兴趣知道为什么,你必须查阅数学,因为人们很可能比我更擅长解释这一点。