मैं कुछ कोड मेरे सह कार्यकर्ता में जाँच देख रहा था, तो वह ऐसा देखा:.Net शब्दकोश ऐसा क्यों दिखता है जैसा सॉर्ट किया गया है?
return list.OrderBy(item => item.Order).ToDictionary(item => item.Id);
मैं तुरंत अपने सह कार्यकर्ता अपने कोड एक गैर,, गलत है क्योंकि Dictionary
एक हैश तालिका है बताया भंडारित संग्रह। मुझे या तो ऑर्डर-संरक्षित संग्रह का उपयोग करना चाहिए, या बाद में आइटम को सॉर्ट करना चाहिए क्योंकि वह उन्हें foreach
के साथ शब्दकोश से पढ़ता है।
लेकिन उसने जवाब दिया "नहीं, नहीं, मेरा कोड सही है! देखो: अब मैंने OrderBy
जोड़ा है, आइटम सही क्रम में दिखाई देते हैं।"
परीक्षण मामले पर, बाहर निकलता है, वह सही था। मैंने कुछ अन्य डेटा पर कोशिश की, लेकिन यह अभी भी पूरी तरह से हल किया गया था!
मैंने उनसे कहा कि उन्हें इस व्यवहार पर भरोसा नहीं करना चाहिए, लेकिन वह असहमत हैं, और मुझे समझाने में परेशानी हो रही है। इसके अलावा, मुझे दिलचस्पी है कि ऑर्डर इतनी बार संरक्षित क्यों प्रतीत होता है।
तो मेरा सवाल है ... Dictionary
, मूल रूप से अपरिवर्तित संग्रह क्यों है, ऐसा लगता है कि इसे हल किया गया है?
शब्दकोश <> कोई गारंटी नहीं कि संग्रह अव्यवस्थित है प्रदान करता है । यह उद्देश्य पर यादृच्छिक उपयोग नहीं करता है। हां, कोड गलत है। –
हां जस्टिन, यह एक डुप्लिकेट है। आपके द्वारा लिंक किए गए प्रश्न का उत्तर वह है जो मैं चाहता था। शब्दकोशों के बारे में इतने सारे प्रश्नों के बीच आप डुप्लिकेट कैसे जल्दी से पा सकते हैं? मैंने खोज की और उसे नहीं मिला। धन्यवाद! –
मुझे नहीं पता (यही कारण है कि मैं इसे एक टिप्पणी के रूप में पोस्ट कर रहा हूं) लेकिन मुझे लगता है कि यह एसक्यूएल जैसा ही है: 'SELECT' द्वारा लौटाई गई पंक्तियां अनिर्दिष्ट क्रम में वापस आती हैं जब तक कि 'ऑर्डर बीई' खंड शामिल न हो । अक्सर, विशेष रूप से छोटे डेटा सेट में, पंक्तियों को उसी क्रम में वापस कर दिया जाता है, जो बहुत से लोगों को भ्रमण करता है। (मैं हमेशा लोगों को 'ऑर्डर बाय' शामिल करने के लिए कहता हूं, यदि वे परिणामों के क्रम के बारे में बिल्कुल परवाह करते हैं। यह * इसके बिना काम कर सकता है, लेकिन यह भी बहुत तोड़ सकता है।) –