2012-06-05 22 views
7

मेरे पास हेटरोजेनस कुंजियों - int और स्ट्रिंग के साथ कुछ कक्षाएं हैं - और मैं उनके साथ सामान्य इंटरफ़ेस के माध्यम से काम करना चाहता हूं। यह बहुत सरल है बस int को स्ट्रिंग में परिवर्तित करें लेकिन यह स्पष्ट रूप से perfomance मुद्दों का कारण बन जाएगा। एक और विकल्प जो मैं देखता हूं उन्हें "ऑब्जेक्ट" के लिए बॉक्स किया जाता है, जो कि सही नहीं लगता है, या किसी भी तरह स्ट्रिंग से अद्वितीय पूर्णांक उत्पन्न करता है (पूर्व "स्ट्रिंग" और "int" के बीच कोई जुड़ नहीं होगा, इसलिए उन्हें केवल " स्ट्रिंग "डोमेन) और यहां qu quionion" कैसे "है?स्ट्रिंग से अद्वितीय पूर्णांक कैसे उत्पन्न करें?

उत्तर

11

बस string.GetHashCode() लें जो बहुत कम टक्कर संभावना के साथ string से int देता है।

+0

"बहुत कम" पर्याप्त नहीं है और मैं टक्कर ढूँढने की तकनीक बनाने के लिए नहीं करना चाहते, यह भूमि के ऊपर यहाँ – Yan

+0

@ user1437713 की तरह लगता है: कितने तार कर आपके पास? – Tudor

+1

@ user1437713 - आप जो चाहते हैं वह संभव नहीं है। किसी भी एल्गोरिदम की तरह आप जो चाहते हैं उसे टक्कर का खतरा होता है GUID वास्तव में अद्वितीय नहीं होते हैं। –

1

जैसा कि @ ट्यूडर ने इंगित किया है GetHashCode स्ट्रिंग्स (और अन्य ऑब्जेक्ट्स) से हैश कोड बनाने का समर्थित तरीका है। दुर्भाग्य से इस तरह के परिवर्तन करने का कोई तरीका नहीं है, इसलिए एक पूर्णांक अद्वितीय तारों का प्रतिनिधित्व करता है जब तक कि आप तारों के सेट पर गंभीर प्रतिबंध नहीं डालते।

आईई। यदि आपके तार पर्याप्त रूप से पर्याप्त हैं (यानी 2 यूनिकोड या 4 ASCII वर्ण) स्पष्ट एक-से-एक मैपिंग है, या यदि तारों का आपका सेट सीमित है और अग्रिम में जाना जाता है।

विषय पर कुछ पढ़ना: अंतर्निहित समस्या pigeonhole principle कहा जाता है जो टकराव की गारंटी देता है। Birthday paradox के कारण उचित रूप से छोटे सेट पर टकराव होने की संभावना है।

2

string.GetHashCode() से अवगत रहें।

नेट प्रलेखन राज्यों https://msdn.microsoft.com/en-us/library/system.string.gethashcode(v=vs.110).aspx

हैश कोड में ही स्थिर होने की गारंटी नहीं है। समान स्ट्रिंग्स राज्यों के लिए हैश कोड .NET Framework के एकल संस्करण के लिए .NET फ्रेमवर्क और प्लेटफॉर्म (जैसे 32-बिट और 64-बिट) के सभी संस्करणों में भिन्न हो सकते हैं। कुछ मामलों में, वे भी आवेदन डोमेन से अलग कर सकते हैं

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