gpt4 book ai didi

c# - 良好的 GetHashCode() 覆盖 Foo 对象列表的顺序

转载 作者:IT王子 更新时间:2023-10-29 04:13:35 26 4
gpt4 key购买 nike

EnumerableObject : IEnumerable<Foo>

包装 List<Foo>

如果EnumerableObject a.SequenceEquals( EnumerableObject b) , 那么它们是相等的。

因此,一个 GetHashCode必须实现。问题是,对列表中的每个元素进行异或运算后,无论顺序如何,都会为所有且仅包含相同元素的任何列表返回相同的哈希码。就它的工作而言,这是可以的,但会导致许多冲突,这会减慢检索等。

什么好,快GetHashCode顺序相关的对象列表的方法?

最佳答案

我会按照通常组合哈希码的方式进行操作 - 加法和乘法:

public override int GetHashCode()
{
unchecked
{
int hash = 19;
foreach (var foo in foos)
{
hash = hash * 31 + foo.GetHashCode();
}
return hash;
}
}

(请注意,在将其用于任何描述的哈希表中的键之后,您不应向列表中添加任何内容,因为哈希会发生变化。这还假设没有空条目 - 如果可以的话是,你需要考虑到这一点。)

关于c# - 良好的 GetHashCode() 覆盖 Foo 对象列表的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8094867/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com