मुझे एक कस्टम ऑब्जेक्ट में समस्या है जिसे तालिका के लिए कुंजी की आवश्यकता है। मुझे एक अद्वितीय संख्यात्मक कुंजी उत्पन्न करने की आवश्यकता है। मुझे टकराव की समस्याएं आ रही हैं और मैं सोच रहा हूं कि क्या मैं मेरी मदद करने के लिए एक शब्दकोश का लाभ उठा सकता हूं। मान लें कि मेरे पास इस तरह की वस्तु है:.NET शब्दकोश टकराव को हल करता है?
class Thingy
{
public string Foo;
public string Bar;
public string Others;
}
और इसी तरह के क्षेत्रों के साथ। आइए कहें कि फू और बार मेरे मुख्य फ़ील्ड हैं - यदि वे दो थिंगिस के बीच बराबर हैं, तो दो ऑब्जेक्ट्स को बराबर माना जाना चाहिए (एक दूसरे को अपडेट का प्रतिनिधित्व कर सकता है, अन्य फ़ील्ड अपडेट किए जा रहे हैं।) तो मेरे पास ये है:
public override bool Equals(object obj)
{
Thingy thing = (Thingy)obj; // yes I do type check first
return (this.Foo == thing.Foo && this.Bar == thing.Bar);
}
public override int GetHashCode()
{
return (this.Foo + this.Bar).GetHashCode(); // using default string impl
}
इसलिए यह अधिकांश भाग के लिए काम करता है, लेकिन दुर्लभ अवसर हैं जहां दो थिंगिस वास्तव में अलग हैं, एक ही हैश कोड है।
मेरा प्रश्न यह है: क्या मैं एक शब्दकोश <Thingy, int
> जहां मैं अपने थिंगिस में डाल सकता हूं, और मेरी वास्तविक कुंजी के रूप में शब्दकोश से बाहर आने वाले क्रमिक मूल्य का उपयोग कर सकता हूं? मैं सोच रहा हूं कि डिक्शनरी, दुर्लभ हैश कोड टकराव का पता लगाने पर, मेरे बराबर विधि को कॉल करेगी, यह निर्धारित करेगी कि वस्तुएं वास्तव में अलग हैं, और उन्हें अलग-अलग स्टोर करें। मैं इसे देखकर इमेजिंग करता हूं, यह उस हैश के लिए एक बाल्टी दिखाई देगा और सही थिंगी की खोज करेगा, फिर तुलना के लिए बराबर का उपयोग कर।
क्या यह शब्दकोश के साथ मामला है, या यह केवल टकराव को हल करता है जहां हैश कोड अलग है, लेकिन (हैश% आकार) समान है? अगर यह काम नहीं करेगा, तो क्या हो सकता है?
बिंदु को चित्रित करने का अच्छा तरीका। – itowlson