2012-12-21 7 views
9

कहें कि मेरे पास Dictionary है, और मैं एक विशिष्ट क्रम में प्रत्येक key और value प्रविष्टि जोड़ता हूं।
अब, यदि मैं बाद में इस Dictionary को उसी क्रम में प्रविष्टियों में पुन: स्थापित करने में सक्षम होना चाहता हूं, तो क्या यह आदेश मुझे इस शब्दकोश पर सरल foreach लूप के साथ मिलता है?फ़ोरैच के साथ शब्दकोश पर इटरेटिंग, यह किस क्रम में किया जाता है?

यदि नहीं, तो मुझे यह सुनकर खुशी होगी कि मैं यह कैसे कर सकता हूं, मुझे पता है कि के बजाय List के साथ आसानी से किया जा सकता है लेकिन मैं नहीं चाहता हूं।

धन्यवाद

+4

नहीं, शब्दकोश आदेश बनाए रखता नहीं है। दुर्भाग्यवश, मुझे लगता है कि आपको एक सूची का उपयोग करने की आवश्यकता है। – phoog

+0

'IENumerable >' इसके बजाए (उदा। एक सूची <>) – sehe

+2

@sehe शब्दकोश * एक * IENumerable > 'का उपयोग करें। – phoog

उत्तर

15

सामान्य Dictionary आइटमों की ऑर्डर की गारंटी नहीं देता है।

यदि आपको ऑर्डर आइटम बनाए रखना चाहते हैं तो आपको OrderedDictionary की आवश्यकता है। ध्यान दें कि नेट क्लासवर्क में इस वर्ग का कोई सामान्य संस्करण नहीं है, इसलिए या तो कुछ प्रकार की सुरक्षा छोड़नी है या अन्य कार्यान्वयन को ढूंढना है (यानी https://www.codeproject.com/Articles/18615/OrderedDictionary-T-A-generic-implementation-of-IOsuggested by Tim S)।

वैकल्पिक रूप से यदि ओ (लॉग एन) लुकअप ठीक है और कुंजी को सॉर्ट किया जाना चाहिए - SortedDictionary

+2

ध्यान दें कि यह वर्ग जेनेरिक का उपयोग नहीं करता है, और इसलिए यह टाइप-सुरक्षित नहीं है, इसलिए एलेक्सी लेवेनकोव का जवाब निश्चित रूप से अधिक सही है। यदि आप अपने संग्रह जेनरिक का उपयोग करना चाहते हैं (मैं इसकी अनुशंसा करता हूं), 'ऑर्डर्ड डिक्शनरी' के इस कार्यान्वयन की तरह कुछ उपयोग करें: http://www.codeproject.com/Articles/18615/OrderedDictionary-TA-generic-implementation- की-आईओ –

2

Dictionary रों हैश टेबल, जिसका अर्थ है कि आप गारंटी नहीं दे सकते कि जोड़े पुनरावृत्ति उसी क्रम आपने उन्हें शामिल में उन्हें वापस आ जाएगी है।

प्रत्येक जोड़ी KeyValuePair<T_K, T_V> है, इसलिए आपके पास List<KeyValuePair<string, string>> हो सकता है जो आपको उस क्रम में फिर से चालू करने देता है यदि आपको इसकी आवश्यकता हो।

+0

क्या आप कृपया' सूची > 'के बारे में अधिक समझा सकते हैं, अनुमान लगाया गया है कि आप शब्दकोशों की सूची का मतलब नहीं हैं? – JavaSa

+1

@JavaSa जब आप 'डिक्शनरी' की गणना करते हैं तो आपको 'KeyValuePair ' की गणना मिलती है, इसलिए मैं केवल एक सूची का उपयोग कर रहा था। – climbage

2

शब्दकोश का आंतरिक प्रकार उपयोग किए गए हैश फ़ंक्शन पर निर्भर करेगा। हालांकि यदि आपको डेटा के क्रमबद्ध दृश्य की आवश्यकता है, तो आप Enumerable.OrderBy का उपयोग कर सकते हैं।

4

ऐसा लगता है कि क्या आप चाहते हैं एक Queue<T> है: http://msdn.microsoft.com/en-us/library/7977ey2c.aspx

आप चाहते हैं क्रम में यह करने के लिए अपने KeyValuePair<T, U> आइटम जोड़ें और उसके बाद foreach ing पर पहले-इन/फर्स्ट-आउट क्रम में हो जाएगा।

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