使用字节数组作为字典键
这个问题在这里已经有了答案:
散列的更好选择可能是这样的:
public override int GetHashCode(byte[] obj)
{
int hash = 0;
for (int i = 0; i < obj.Length; i++)
{
exponents = [0, 8, 16, 24];
exponent = exponents[i % 4];
unchecked
{
hash += obj[i] * (1 << i);
}
}
return hash;
}
从概念上讲,这将4个字节的每个块转换为一个int,因为它们都是32位,然后将它们与标准整数溢出相加。 因此,长度为4或更小的所有唯一字节数组将映射到不同的哈希码,并且(给定随机数据)较大的数组应该散列在哈希空间中。 如果你期待很多非常相似的数组,或者每4或者4次重复的数组,这可能不是最好的策略。
MurmurHash非常快速且相当简单。 有很多基于.NET的实现,但我不完全知道它们是如何实现的。
链接地址: http://www.djcxy.com/p/39767.html上一篇: Using byte array as dictionary key
下一篇: Creating a unique hash code based on some properties of an object