2010-10-08 15 views

उत्तर

42

परावर्तक के अनुसार:

public override int GetHashCode() 
{ 
    return this; 
} 

भावना बनाता है, यह करता है?

+0

मुझे लगता है। मैं सोच रहा था कि सभी मूल्य प्रकारों का एक आम कार्यान्वयन होगा। –

+0

नहीं, प्रत्येक मान प्रकार का अपना स्वयं का है। UInt32 स्वयं को Int32 पर रखता है, यह बस स्वयं को एक हस्ताक्षरित int में बदल देता है। Int16 और Int64 32-बिट मान उत्पन्न करने के लिए कुछ फंकी बिट स्थानांतरण करते हैं। सिस्टम.बोलियन इसके राज्य के आधार पर 0 या 1 देता है। –

+3

इंटेरेसिंग, फिर क्यों 'int = 10;' और 'int b = 10.GetHashCode();' विभिन्न x86 निर्देश प्रदान करता है। हम देखते हैं कि यह एक-पंक्ति विधि रेखांकित की जाएगी, इसलिए यह वही होना चाहिए लेकिन यह –

-2

32 बिट के लिए हैश 32 बिट मान का सबसे अच्छा तरीका व्हील का आविष्कार नहीं करना है, मूल्य का उपयोग करें। बहुत तेज, कोई टक्कर नहीं, वास्तव में एक सही तरीका है।

+3

हां नहीं है, लेकिन इसका मतलब यह नहीं है कि इसे इस तरह कार्यान्वित किया गया था। :) –

+9

असल में यह इसे लागू करने का एक अजीब तरीका है। प्रति एमएस "सर्वोत्तम प्रदर्शन के लिए, एक हैश फ़ंक्शन को सभी इनपुट के लिए भी वितरण उत्पन्न करना चाहिए, जिसमें अत्यधिक क्लस्टर किया गया इनपुट शामिल है। एक निहितार्थ यह है कि ऑब्जेक्ट को ऑब्जेक्ट करने के लिए छोटे संशोधनों के परिणामस्वरूप हैश कोड के लिए परिणामी हैश कोड में बड़े बदलाव हो सकते हैं प्रदर्शन।" (http://msdn.microsoft.com/en-us/library/system.object.gethashcode.aspx) यह क्रियान्वयन खराब क्लस्टरिंग के कारण सरल होता है और जब इन्सटेबल कुंजी के रूप में इनट्स का उपयोग किया जाता है तो यह भयानक प्रदर्शन कर सकता है। –

+10

@JeffWalkerCodeRanger यह आमतौर पर सच है। लेकिन अधिकांश हैश टेबल को 'हैशकोड% बाल्टी लम्बाई' करके कार्यान्वित किया जाता है। इसलिए '0, 1, 2, 3, ... के सामान्य अनुक्रम में सही हैश कोड होंगे। हालांकि, यदि आपका इनपुट '0, 32, 64, 96, 128 है, ... 'किसी भी बिजली की दो बाल्टी आकार सरणी <= 32 में 100% हैश टकराव होंगे। अगर एमएस इसे थोड़ा सा शफल करने के लिए बदल देगा, तो एक और अनुक्रम होगा जो 100% हैश टकराव देगा। मेरा मुद्दा यह है कि इंट 32 के लिए कोई संदर्भ नहीं है, और संदर्भ के बिना, आप एक अच्छा हैश फ़ंक्शन नहीं बना सकते हैं। यदि आपको हैश डेटा की आवश्यकता है, तो अपना खुद का हैशर लिखें। – Aidiakapi

संबंधित मुद्दे