इसी प्रकार के लिए KeyValuePair और एक शब्दकोश की सूची में क्या अंतर है? क्या एक या दूसरे का उपयोग करने के लिए एक उपयुक्त समय है?
इसी प्रकार के लिए KeyValuePair और एक शब्दकोश की सूची में क्या अंतर है? क्या एक या दूसरे का उपयोग करने के लिए एक उपयुक्त समय है?
जवाबों:
जब आपको कुंजी पर तेज लुकअप की आवश्यकता नहीं है - Dictionaryएक निश्चित ओवरहेड द्वारा उपयोग किए गए हैशटेबल को बनाए रखना है ।
शब्दकोश सामान्य प्रकार है जिसमें कुंजी-मूल्य जोड़े का संग्रह होता है। शब्दकोश लुकअप ऑपरेशन के लिए तेज़ है, क्योंकि आंतरिक रूप से हैश फ़ंक्शन का उपयोग कर रहा है । इसका मतलब है, सभी कुंजियों को शब्दकोश में अद्वितीय होना चाहिए ।
इस उदाहरण पर विचार करें:
List<KeyValuePair<int, string>> pairs = new List<KeyValuePair<int, string>>();
pairs.Add(new KeyValuePair<int, string>(1, "Miroslav"));
pairs.Add(new KeyValuePair<int, string>(2, "Naomi"));
pairs.Add(new KeyValuePair<int, string>(2, "Ingrid"));
Dictionary<int, string> dict = new Dictionary<int, string>();
dict.Add(1, "Miroslav");
dict.Add(2, "Naomi");
dict.Add(2, "Ingrid"); // System.ArgumentException: An item with the same key has already been added.
इसलिए आपको हमेशा दो कम से कम दो चीजों पर विचार करना चाहिए:
जब आप वस्तुओं के क्रम की परवाह करेंगे तो सूची भी उपयोगी होगी।
फिलिप नगन के जवाब में, SOAP या अन्यथा, आप XML उन वस्तुओं को अनुक्रमित नहीं कर सकते हैं जो IDEDIA को लागू करती हैं।
प्रश्न: मैं हैशटेबल्स को अनुक्रमित क्यों नहीं कर सकता?
A: XmlSerializer ID एन्क्रिप्शन इंटरफ़ेस को लागू करने वाली कक्षाओं को संसाधित नहीं कर सकता है। यह आंशिक रूप से शेड्यूल बाधाओं के कारण था और आंशिक रूप से इस तथ्य के कारण कि एक हैशटेबल में एक्सएसडी टाइप प्रणाली में एक समकक्ष नहीं है। एकमात्र समाधान एक कस्टम हैशटेबल को लागू करना है जो IDEDIA इंटरफ़ेस को लागू नहीं करता है।
से http://blogs.msdn.com/bclteam/archive/2004/09/03/225473.aspx :
KeyValuePairबनामDictionaryEntry
[क्रिज़ीस्तोफ़ क्विना]हम के कार्यान्वयन के साथ एक समस्या पर चर्चा
IEnumerableपरDictionary<K,V>। किस प्रकारIEnumerable.GetEnumerator().Currentलौटना चाहिए ?KeyValuePair<K,V>याDictionaryEntry? उसी के लिएICollection.CopyTo। सरणी के लिए किस प्रकार की प्रतिलिपि बनाई जानी चाहिए के उदाहरण?हमने निम्नलिखित निर्णय लिया:
IEnumerableऔरICollectionइंटरफ़ेस कार्यान्वयनKeyValuePair<K,V>आइटम प्रकार के रूप में उपयोग करेगा ।IDictionaryविशिष्ट सदस्य (GetEnumeratorलौटने वालेIDictionaryEnumerator)DictionaryEntryआइटम प्रकार के रूप में उपयोग करेंगे।कारण यह है कि हम एक बदलाव करने की प्रक्रिया में हैं जहां
IEnumerator<T>विस्तार होगाIEnumerator। यह बहुत अजीब होगा अगर पदानुक्रम से चलनाDictionary<K,V>->IEnumerable<T>-> -IEnumerableहमने अचानक एन्यूमरेटर से लौटे आइटम का प्रकार बदल दिया।