请标记为重复,但我找到的大多数问题都太具体或比我要找的更复杂。例如,在 "什么是好的哈希函数" 中,被接受的答案似乎是面向字符串的。
最近我开始在.NET中编程,我觉得内置类缺乏一些基本功能,比如检查相等性和查找散列值。我相信它们有设计上的理由;没有必要为.NET辩护。我只想知道如何避免需要使用集合作为字典键时出现重大偏离。例如,我希望两个包含完全相同值的不同List对象映射到字典中的同一条目。默认情况下,它们不能:对于List,列表仅等于它本身,因此具有相同值的另一个列表实例是不同的键。
实现Equals很简单,而我不确定的是哈希函数。
提供了可以在我的GetHashCode实现中调用的内容吗?
如果我必须从头开始写,有什么非常简单但足够好的哈希算法吗?我可以使用SHA1,但我认为这可能过度了。我可以只是异或所有项的哈希值,但我认为这会有一些恶劣的碰撞属性。我不在乎计算哈希值的速度有多快,但我不希望我的哈希表在具有某些特定分布的数据集上变慢到线性。我想要的是非常简单,以至于我能够记住它。如果您能解释(或链接到)为什么它有效,那就更好了。
最近我开始在.NET中编程,我觉得内置类缺乏一些基本功能,比如检查相等性和查找散列值。我相信它们有设计上的理由;没有必要为.NET辩护。我只想知道如何避免需要使用集合作为字典键时出现重大偏离。例如,我希望两个包含完全相同值的不同List对象映射到字典中的同一条目。默认情况下,它们不能:对于List,列表仅等于它本身,因此具有相同值的另一个列表实例是不同的键。
实现Equals很简单,而我不确定的是哈希函数。
提供了可以在我的GetHashCode实现中调用的内容吗?
如果我必须从头开始写,有什么非常简单但足够好的哈希算法吗?我可以使用SHA1,但我认为这可能过度了。我可以只是异或所有项的哈希值,但我认为这会有一些恶劣的碰撞属性。我不在乎计算哈希值的速度有多快,但我不希望我的哈希表在具有某些特定分布的数据集上变慢到线性。我想要的是非常简单,以至于我能够记住它。如果您能解释(或链接到)为什么它有效,那就更好了。