GetHashCode
オーバーライドからデータに対する迅速な比較/検索の実行まで、C# で適切なハッシュ アルゴリズムにアクセスする必要があるケースが数多くあります。
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;
}
人々はこれについてどう思いますか?