Her yere baktım ama hiçbir şey bulamıyorum. Bu konuda biraz ışık tutabilir mi?GetHashCode() Int32 için nasıl uygulanır?
cevap
Reflektör göre:
public override int GetHashCode()
{
return this;
}
yapar, mantıklı?
32 bit 32 bit değerine sahip olmanın en iyi yolu tekerleği icat etmek değil, değeri kullanmak. Çok hızlı, çarpışma yok, gerçekten mükemmel bir yol.
Evet, ancak bu, bu şekilde uygulandığı anlamına gelmiyor. :) –
Aslında bunu uygulamak için çok kolay bir yoldur. MS başına "En iyi performans için, bir karma işlevi, kümelenmiş girdi de dahil olmak üzere, tüm girdiler için eşit bir dağılım oluşturmalıdır. Bir implikasyon, nesne durumundaki küçük değişikliklerin, en iyi karma tablo için sonuçlanan karma kodunda büyük değişikliklerle sonuçlanması gerektiğidir. performans." (http://msdn.microsoft.com/en-us/library/system.object.gethashcode.aspx) Bu uygulama basitken, hatalı kümelenmeye neden olur ve hashtable tuşları olarak ints kullanıldığında korkunç performansa neden olabilir. –
@JeffWalkerCodeRanger Bu genellikle doğrudur. Ancak çoğu hash tablosu 'hashCode% bucketLength' kullanılarak gerçekleştirilir. Bu nedenle, 0, 1, 2, 3, ... 'nin ortak sırası mükemmel karma kodlara sahip olacaktır. Ancak, girişiniz 0, 32, 64, 96, 128, ... ise, iki kova boyutu dizisi <= 32'nin herhangi biri% 100 karma çarpışmalara sahip olacaktır. MS biraz karıştırmak için değiştirirse,% 100 karma çarpışmalar verecek başka bir dizi olacaktır. Benim düşüncem, Int32 için bir bağlam yoktur ve bağlam olmadan iyi bir karma işlevi yapamazsınız. Verileri toplamanız gerekiyorsa, kendi yazıcınızı yazın. – Aidiakapi
- 1. GetHashCode() yalnızca
- 2. Uygulama GetHashCode
- 3. Int32.Maximum + değerli sayıyı int32'ye dönüştürme
- 4. Boş alanları GetHashCode?
- 5. Dize tuşları ile GetHashCode()
- 6. .NET Core GetHashCode deterministic
- 7. ReSharper GetHashCode için neden '397' kullanılıyor?
- 8. IEqualityComparer toleransla <double>; GetHashCode nasıl uygulanır? Bir yeniden kullanılabilir DoubleEqualityComparer uygulanması ediyorum
- 9. GetHashCode (anahtar) & int.MaxValue
- 10. process.WaitForExit (int32) eşzamansız olarak
- 11. Ayar NSUserDefaults.standardUserDefaults() int32 Swift
- 12. Liste <String, Int32, Int32> (çok boyutlu genel liste)
- 13. Eylem yöntemi çağrlanılamıyor 'System.Web.Mvc.ActionResult Index (Int32, Int32, System.String, System.String, System.String, Int32 ByRef)
- 14. Int32.ToString() Çok yavaş
- 15. Nasıl IEnumerable <int> dönüştürebilirsiniz Int32
- 16. Int32'yi Int'ta Swift'e nasıl dönüştürebilirim?
- 17. Int32 öğesinden bayt dizisine dönüştürülüyor
- 18. Eşitleme yapmak için doğru yol Eşittir() ve GetHashCode()
- 19. Aynı işlevsellik iki düğme için nasıl uygulanır
- 20. Redis veri deposu için "tetikleyici" nasıl uygulanır?
- 21. Android için cordova eklenti-datepicker nasıl uygulanır?
- 22. ClassList.contains için bir dizi sınıf nasıl uygulanır?
- 23. Datalist için kaydırma çubuğu nasıl uygulanır?
- 24. Android'de BottomSheets için dalgalanma efekti nasıl uygulanır
- 25. Özel için kaydetme noktaları nasıl uygulanır?
- 26. Ben bir Int64 değeri int32
- 27. C# int, Int32 ve enums
- 28. C# GetHashCode/I GetHashCode ile ilgili bir sorun bakan ve bir sınıf için geçersiz hangi Eşittir ediyorum
- 29. GWT'de HashMap nasıl uygulanır?
- 30. MonoTouch'da UISearchBar nasıl uygulanır
Sanırım. Tüm değer türlerinin ortak bir uygulamaya sahip olacağını düşünüyordum. –
Hayır, her bir Değer türü kendine ait. UInt32 kendisini Int32'ye atar, bu sadece kendisini bir İmzalı Int'a dönüştürür. Int16 ve Int64, 32-Bit Değeri oluşturmak için biraz hareketli geçiş yapar. System.Boolean, durumuna bağlı olarak 0 veya 1 döndürür. –
Interesing, neden sonra int int = 10; 've' int b = 10.GetHashCode(); 'farklı x86 yönergeleri sağlar. Bu tek satırlı yöntemin satır içi olarak belirtileceğini görüyoruz, yani aynı olmalı ama –