C# 'da iyi bir karma algoritmaya erişim ihtiyacım olan çok sayıda vakayla karşılaştım. Bu sayede GetHashCode
no'lu veriyi geçersiz karşılaştırmalar yapabiliyordum.C# FNV Hash uygulaması
FNV hash'ının gerçekten kolay/iyi/hızlı bir karma algoritma olmasını buldum. Ancak, C# uygulamasının iyi bir örneğini hiç görmedim.
şöyle FNV-1a karma algoritması çekirdeğidir: Yani
hash = OFFSET_BASIS
foreach (object value in object)
{
hash = hash^value.GetHashCode()
hash = hash * FNV_PRIME
}
, ben böyle bir şey yapıyor sonunda bir sınıf için GetHashCode
geçersiz zaman: İnsanları ne yapıyoruz
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;
}
bunu düşün
Bana iyi görünüyor gibi diyebiliriz ... Eğer shoudl parantez içinde sadece yakın 'karma^x' - örneğin (hash^x) * prime' - aksi takdirde çarpma ilk önce gerçekleştirilecektir. – digEmAll