我有很多情况需要在 C# 中访问一个体面的散列算法,从覆盖GetHashCode
到对数据执行快速比较/查找。
我发现 FNV 哈希是一种非常简单/好/快速的哈希算法。但是,我从未见过 C# 实现的好例子。
FNV-1a哈希算法的核心如下:
hash = OFFSET_BASIS
foreach (object value in object)
{
hash = hash ^ value.GetHashCode()
hash = hash * FNV_PRIME
}
所以,当我覆盖GetHashCode
一个类时,我最终会做类似的事情:
public static class FNVConstants
{
public static readonly int OffsetBasis = unchecked((int)2166136261);
public static readonly int Prime = 16777619;
}
public override int GetHashCode()
{
int hash = Constants.FNVConstants.OffsetBasis;
hash = (hash ^ EntityId.GetHashCode()) * Constants.FNVConstants.Prime;
hash = (hash ^ FromDate.GetHashCode()) * Constants.FNVConstants.Prime;
hash = (hash ^ ToDate.GetHashCode()) * Constants.FNVConstants.Prime;
return hash;
}
人们对此有何看法?