OrderedDictionary
भार के अनुक्रमण आपरेशन तो एक पूर्णांक के साथ कि अनुक्रमण N
स्थिति में आइटम मिल जाएगा N
, जबकि एक साथ का अनुक्रमण Object
आइटम उस वस्तु को coresponding प्राप्त हो सकें। यदि किसी को उस क्रम में एक OrderedDictionary<int, string>
बुलाया myDict
, और जोड़े गए आइटम (1, "जॉर्ज") और (0, "फ्रेड") बनाने थे, तो myDict[0]
"जॉर्ज" या "फ्रेड" वापस करना चाहिए ?
इस तरह के मुद्दे को प्रमुख प्रकार पर एक वर्ग बाधा डालकर हल किया जा सकता था। दूसरी ओर, सामान्य संग्रह की बहुत अधिक उपयोगिता मूल्य प्रकार के साथ कुशलता से काम करने की उनकी क्षमता से उपजी है। कुंजी प्रकार पर एक वर्ग की बाधा को हल करना थोड़ा बदसूरत लगता है।
अगर क्लास को सीएलएस का अनुपालन नहीं करना था, लेकिन केवल vb.net के साथ काम करना था, तो एक समझदार डिज़ाइन का उपयोग अनुक्रमित गुणों के नाम से किया जा सकता था। इस प्रकार, ऊपर के उदाहरण में, myDict.ByKey[0]
"फ्रेड" की myDict.BySequence[0]
उपज होगी , और "जॉर्ज" की उपज होगी। दुर्भाग्य से, सी # जैसी भाषाएं अनुक्रमित गुणों के नाम का समर्थन नहीं करती हैं। हालांकि इस तरह के गुणों के बिना भी उपर्युक्त वाक्यविन्यास के उपयोग की अनुमति देने के लिए कुछ को खारिज किया जा सकता है, लेकिन इस तरह की संरचनाओं के क्षेत्र को लपेटने का दुर्भाग्यपूर्ण निर्णय Point
और Rectangle
इसका मतलब है कि myDict.ByKey[0] = "Wally"
काम करने के लिए, myDict.ByKey
एक नया वर्ग ऑब्जेक्ट वापस करना होगा। एक संरचना अधिक कुशल होगी, लेकिन संकलक अस्वीकार कर देगा कि क्या लिखा है केवल पढ़ने के लिए एक संरचना की तरह (इसके बावजूद कि संपत्ति द्वारा संशोधित संरचना को संशोधित नहीं किया जाएगा)ByKey
, लेकिन इसके बजाय उस संग्रह को संशोधित करें, जिसमें यह एक संदर्भ रखता है)।
व्यक्तिगत रूप से, मुझे लगता है कि एक डिक्शनरी-ईश ऑब्जेक्ट को निर्दिष्ट किया गया था जो प्रविष्टि क्रम का ट्रैक रखने के लिए एक अच्छी बात होगी; मुझे एक डिक्शनरी-ईश ऑब्जेक्ट भी चाहिए जो किसी विशेष कुंजी से जुड़ी कुंजी को आसानी से लौटा सके (ताकि, उदाहरण के लिए यदि किसी के पास केस-इनसेटिव डिक्शनरी है और उसने "जॉर्ज" की कुंजी के साथ एक रिकॉर्ड जोड़ा है, तो एक डिक्शनरी से पूछ सकते हैं कि "जॉर्ज" के साथ कौन सी कुंजी जुड़ी KeyValuePair
हुई है, जो किसी एन्यूमरेशन में दी गई सभी वस्तुओं को खोजे बिना है ।
SortedDictionary<TKey, TValue>
: msdn.microsoft.com/en-us/library/f7fta44c.aspx