【发布时间】:2013-08-14 11:14:19
【问题描述】:
请标记为重复,但到目前为止我发现的大多数问题都过于具体或比我正在寻找的更复杂。例如。在"What is a good hash function" 中,接受的答案似乎是面向散列字符串的。
我最近开始使用 .NET 进行编程,但遗憾的是,内置类无法执行一些基本操作,例如检查相等性和查找其哈希值。我相信他们有他们的设计原因。无需为 .NET 辩护。当我需要使用集合作为字典的键时,我只想知道如何避免显着的偏题。例如,我希望两个包含所有相等值的不同 List 对象映射到字典中的同一条目。开箱即用,它们不这样做:List 的默认行为是 List 不等于除自身之外的任何东西,因此具有相同值的列表的另一个实例是不同的键。
实现 Equals 很简单。这是我不确定的哈希函数。
在我的 GetHashCode 实现中是否提供了一些可以调用的东西?
如果我必须从头开始编写,那么真正简单但足够好的哈希算法是什么?我可以使用 SHA1,但我认为这太过分了。我可以对项目的所有哈希值进行异或运算,但我认为这会有一些令人讨厌的碰撞属性。我不在乎计算哈希是否非常快,但我不希望我的哈希表在具有某些特定分布的数据集上变慢到线性。我想要的是简单到我能记住的东西。如果你能解释(或链接到)它为什么起作用,那么奖励。
【问题讨论】:
标签: algorithm collections hash