पर निर्भर करता है मैं एक वर्ग MyClass
संग्रह जहां कुंजी मान
class MyClass
{
public string Name { get; set; } // is unique among all instances
public SomeClass Data { get; set; }
...
}
जिनमें से मैं एक संग्रह में कई उदाहरण संग्रहीत करना चाहते है। मुझे अक्सर यह जांचने की आवश्यकता होगी कि किसी निश्चित नाम वाला कोई उदाहरण मौजूद है, और यदि ऐसा होता है, तो उस उदाहरण को पुनर्प्राप्त करें। चूंकि पूरे संग्रह के माध्यम से पुनरावृत्ति करना एक विकल्प नहीं है (प्रदर्शन!), मैंने कुंजी-मूल्य-जोड़े के संग्रह का उपयोग करने के बारे में सोचा, उदाहरण के लिए एक IDictionary<string, MyClass>
।
मेरा प्रोग्राम MyClass
के नामकरण उदाहरणों को भी अनुमति देगा (अगर नाम विशिष्टता का उल्लंघन किया जाएगा तो यह नामकरण की अनुमति नहीं देगा)। लेकिन अगर मैं MyClass
का नाम बदलता हूं, तो मुझे डेटा को सुसंगत रखने के लिए शब्दकोश से पुरानी प्रविष्टि को हटाने और नए नाम (यानी नए नाम के साथ) को भी हटाने की आवश्यकता होगी।
समस्या यह है कि मेरे पास इस तरह के कई शब्दकोश होंगे (जिसमें सभी MyClass
उदाहरणों के सबसेट शामिल हैं), और उन्हें ट्रैक करना मुश्किल होगा और प्रत्येक नामकरण के बाद सभी शब्दकोशों को लगातार अद्यतन करना होगा।
क्या कुंजी-मूल्य जोड़े स्वचालित रूप से लगातार बनाए रखने का कोई तरीका है? मुझे लगता है कि मैंने एक डेटा संरचना के बारे में सुना है जो इसे अनुमति देता है, जो कम से कम C++ में मौजूद है (दुर्भाग्य से, मुझे नहीं पता कि इसे कैसे कहा जाता है)। असल में, यह एक संग्रह होना चाहिए जहां कुंजी केवल एक सादा स्ट्रिंग नहीं है बल्कि एक स्ट्रिंग (इस मामले में नाम संपत्ति के लिए) के संदर्भ की तरह, लेकिन व्यवहार करता है जैसे कि यह एक स्ट्रिंग था। क्या सी # में ऐसी चीज मौजूद है? क्या आपके पास अन्य विचार हैं कि संग्रह को कैसे बनाए रखा जाए?
मेरा एकमात्र विचार है कि मेरे कार्यक्रम के उच्चतम स्तर पर सभी शब्दकोशों का संग्रह होना और वास्तविक नामकरण प्रक्रिया के बाद उन सभी शब्दकोशों को नामकरण विधि अपडेट करना है। लेकिन एक बेहतर तरीका होना चाहिए!
क्यों इस सवाल Best way to change dictionary key का डुप्लिकेट नहीं है:
मैं पहले से ही जानते हैं कि एक शब्दकोश कुंजी को बदलने की अनुमति नहीं है। मैं इसके बजाय एक और डेटा संरचना मांग रहा हूं जो किसी भी तरह से महत्वपूर्ण परिवर्तनों (प्रदर्शन लाभ को पूरी तरह खोए बिना) के अनुकूल है, और मैं अन्य दृष्टिकोणों के लिए भी पूछ रहा हूं। तो मेरा प्रश्न किसी भी दिशा से इनपुट करने के लिए और अधिक खुला है, जब तक कि यह डेटा को सुसंगत रखने की समस्या को हल करने में मदद करता है।
शब्दकोश (या किसी अन्य कुंजी-मूल्य-संग्रह) का उपयोग करते समय आपको यह सुनिश्चित करना चाहिए कि चाबियाँ वही रहें। यही कारण है कि वे संग्रह तेजी से हैं, यह है कि वे चाबियाँ हैंशिंग का उपयोग करते हैं, इस प्रकार कई कुंजियां बहुत तेज पाई जा सकती हैं। यदि आप हैश-फ़ंक्शन में उपयोग किए गए मानों को संशोधित करते हैं तो आप हैश-कार्यक्षमता को पूरी तरह से खो रहे हैं और इस प्रकार प्रदर्शन-लाभ – HimBromBeere
मुझे नहीं लगता कि प्रश्न ऊपर वर्णित एक डुप्लिकेट है और एक उत्तर सुझाएगा (जो डुप्लिकेट लिंक द्वारा दिए गए उत्तर के साथ संगत नहीं है) –
फिर से पूछें, और मैं –