के कार्यान्वयन में मेरे पास कई मामलों हैं जहां मुझे डेटा के खिलाफ त्वरित तुलना/लुकअप करने के लिए GetHashCode
ओवरराइड करने से सी # में एक सभ्य हैशिंग एल्गोरिदम तक पहुंच की आवश्यकता है।सी # एफएनवी हैश
मुझे एफएनवी हैश को वास्तव में आसान/अच्छा/त्वरित हैश एल्गोरिदम माना गया है। हालांकि, मैंने कभी सी # कार्यान्वयन का अच्छा उदाहरण नहीं देखा है।
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;
}
लोग क्या करते हैं इस बारे में सोचो?
यह मेरे लिए ठीक लग रहा है की तरह फोन ... आप shoudl बस पास 'हैश^कोष्ठक में x' - जैसे '(हैश^एक्स) * प्राइम '- अन्यथा गुणा पहले किया जाएगा। – digEmAll