سؤال

مثل العديد منكم، أستخدم ReSharper لتسريع عملية التطوير.عندما تستخدمه لتجاوز أعضاء المساواة في الفصل، فإن الكود البرمجي الذي ينتجه لـ GetHashCode() يبدو كما يلي:

    public override int GetHashCode()
    {
        unchecked
        {
            int result = (Key != null ? Key.GetHashCode() : 0);
            result = (result * 397) ^ (EditableProperty != null ? EditableProperty.GetHashCode() : 0);
            result = (result * 397) ^ ObjectId;
            return result;
        }
    }

بالطبع لدي بعض أعضائي هناك، لكن ما أريد معرفته هو لماذا 397؟

  • يحرر:لذا فإن سؤالي سيكون أفضل صياغته على النحو التالي: هل هناك شيء "خاص" بشأن العدد الأولي 397 خارجه باعتباره عددًا أوليًا؟
هل كانت مفيدة؟

المحلول

ربما لأن 397 هو عدد أولي ذو حجم كافٍ لتجاوز متغير النتيجة وخلط أجزاء التجزئة إلى حد ما، مما يوفر توزيعًا أفضل لرموز التجزئة.لا يوجد شيء مميز في العدد 397 يميزه عن الأعداد الأولية الأخرى التي لها نفس المقدار.

نصائح أخرى

بن على صواب، فهو يعكس التجميع الذي يمكنك رؤيته وهو مجرد رقم أولي اختاروا استخدامه.

تبدو التجزئة التي يستخدمها resharper وكأنها نسخة مختلفة من FNV التجزئة.يتم تنفيذ FNV بشكل متكرر باستخدام أعداد أولية مختلفة.هناك مناقشة حول الاختيار المناسب للأعداد الأولية لـ FNV هنا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top