2011-07-26 21 views
9

I olan tek alan bir bool[] (çalışmak belirlenen boyutu) olan, değişmez bir sınıfı vardır.GetHashCode() yalnızca

nasıl bu sınıfın iyi bir hash kodu hesaplayabilir? Genellikle, her bir alanda GetHashCode()'u arayabilir ve bunları şu işleçlerden biriyle birleştirirdim: + | &, ancakiçin 0 ve 1 için 1 için olası karma kodlar olduğundan, bu beni hiçbir yere götürmeyecektir. Uygulamamın yalnızca bools ile çalışması gerekiyor ve isteğe bağlı bir dizi için çalışmalıdır.

(Muhtemelen çok önemli ama C#/içinde kodlama ediyorum gelmez NET..)

+0

Eğer BitArray' 'kabul veya' BitVector32' boyutuna bağlı mı? Bu GetHashCode ve benzeri gibi daha az uygulamayı gerektirir. – Sebastian

cevap

8

senin bool[]bools adlı varsayarak: Eğer endişe kadar

unchecked { 
    int hash = 17; 
    for(int index = 0; index < bools.Length; index++) { 
     hash = hash * 23 + bools[index].GetHashCode(); 
    } 
    return hash; 
} 
+1

Numaraları açıklar mısınız lütfen Jason? 17 ve 23 nereden geldi? :-) –

+0

@Jamie Dixon: Bu standart bir uygulama türüdür; Anahtar nokta, çarpanın bir asal olmasıdır. Bence Java'nın 'String.getHashCode' çok benzer bir şey. – jason

+0

bu işe yaramaz, farklı pozisyonlarda aynı unsurlarla diziler aynı HashCode – mcabral

0

Basit bools.GetHashCode() çalışıyor performans hakkında (bu durumda Jason'ın çözümünü kullanın).

İlgili konular