2010-05-22 19 views

cevap

34

Minimum gereksinim, karma kodun belirli bir değer için aynı olması gerektiğidir. Yani bu uygulama çalışır, ancak dağıtım korkunç:

public override int GetHashCode() { 
    return 1; 
} 

iyi çözüm için karma kodları nesnede ilgili tüm verileri göz önünde bulundurmalıdır ve olabildiğince eşit tamsayı aralığında mümkün olduğunca dağıtılacak.

Tüm üyeleri dikkate alan, ancak çok iyi bir dağıtım sağlamayan bir uygulama System.Drawing.Point yapısında bulunabilir. Bir asal bir üyeyi çarpmak için daha iyi bir dağılımını elde etmek

public override int GetHashCode() { 
    return this.X^this.Y; 
} 

Tek yön edilir: X ve Y eşit olan tüm noktalar hash kodu sıfır olsun, yani üyeleri bitlerini birleştirmek için XOR kullanır sayısı ve gerektiğinde tekrar, bir sonraki elemanı ekleyin:

public override int GetHashCode() { 
    return ((this.Value1 * 251) + this.Value2) * 251 + this.Value3; 
} 

aynı yöntem, basit rastgele jeneratörü kullanılmıştır oldukça iyi değerleri dağıtır gibi.

+0

Bazı gerçekten iyi noktaları var. Teşekkürler! – dotnetdev

İlgili konular