2009-08-18 12 views
9

मेरा मतलब है: क्या NSDictionary में कुंजी और मानों का क्रम हमेशा एनएस डिक्शनरी शुरू करते समय निर्दिष्ट किया गया था? या अगर मुझे वास्तव में चाबियों के आदेश को जानने की ज़रूरत है तो क्या मुझे एक अलग एनएसएआरएआरई को बेहतर बनाए रखना चाहिए?क्या एनएस डिक्शनरी में चाबियाँ और मान हैं?

उत्तर

16

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

यदि आपको आदेश देने के लिए कुंजी/मानों की आवश्यकता है, तो इसके बजाय एक एनएसएआरएआर (या कुछ अन्य आदेशित डेटा संरचना) का उपयोग करें।

+2

@ kraag22: कहीं भी 'NSDictionary' प्रलेखन में यह आदेश के बारे में कोई वादा या गारंटी नहीं देता है - यह केवल कहता है कि यह "उन वस्तुओं के लिए प्रोग्रामैटिक इंटरफेस प्रदान करता है जो कुंजी और मूल्यों के अपरिवर्तनीय संगठनों का प्रबंधन करते हैं"। '-allKeys' और '-allValues' संदेशों के लिए दस्तावेज़ यह कहते हैं कि उन तरीकों से लौटाया गया आदेश परिभाषित नहीं किया गया है, हालांकि संभवतः यह एक बुरा विचार नहीं होगा कि यह समझाए जाने के अन्य तरीकों के लिए अधिक स्पष्ट हो शब्द तत्व –

0

कुंजी को एनएस डिक्शनरी एक्सेस करते समय उसी क्रम में होने की गारंटी नहीं दी जाती है। यदि चाबियों की तुलना की जा सकती है (जो मुझे लगता है कि उन्हें आपका प्रश्न दिया जा सकता है), तो आप उन्हें सॉर्ट किए गए क्रम में एक्सेस करने की आवश्यकता होने पर हमेशा उन्हें सॉर्ट कर सकते हैं।

आपको पहले सरणी में चाबियाँ पढ़कर और पाठ्यक्रम की सरणी को सॉर्ट करके ऐसा करने की आवश्यकता होगी।

0

NSDictionary, Apple's reference के अनुसार, मूल रूप से हैश तालिका के चारों ओर एक रैपर है। तो नहीं, उन्हें किसी भी विशेष क्रम में होने की गारंटी नहीं है।

+0

वे हैश टेबल तक कैसे पहुंचते हैं? कभी सादा हैश टेबल नहीं देखी है, लेकिन यह जानना चाहेंगे कि यह कैसा दिखता है। क्या यह आंतरिक रूप से दो सिंक्रोनस एनएसएआरएआरई का उपयोग करने में एक बड़ा अंतर है? –

+0

क्या आप पूछ रहे हैं कि हैश टेबल डेटा संरचना के समान दिखता है? विकी की एक अच्छी अच्छी व्याख्या है: http: //en.wikipedia।संगठन/विकी/हैश_टेबल यदि आप जानना चाहते हैं कि ऐप्पल विशेष रूप से उन्हें कैसे लागू करता है और उन्हें एक्सेस करता है, तो मुझे डर है कि हमारे लिए उपलब्ध एकमात्र चीजें हैंडर फाइलें हैं;) –

+0

इसलिए जब मुझे यह अधिकार मिलता है, तो हैश टेबल लगभग सभी के बारे में है हैश फ़ंक्शन जो किसी दिए गए स्ट्रिंग-कुंजी + सरणी आकार के लिए सही सरणी-अनुक्रमणिका की गणना करेगा। लागू करने के लिए मुश्किल लगता है, लेकिन प्रदर्शन के लिए अच्छा है। यदि यह सच है तो इससे कोई फ़र्क नहीं पड़ता कि किसी शब्दकोश में कितनी चीज़ें शामिल की गई हैं। –

2

NSDictionary कुंजी & मानों का आदेश नहीं दिया गया है। आपके विकल्प:

  • क्रम में चाबियों का एक अलग सरणी बनाए रखें आप इच्छा
  • लिखें या किसी मौजूदा श्रेणी से ऊपर
  • लिखें के लिए एक आवरण है कि लगता है या कि कहते हैं NSDictionary के एक मौजूदा उपवर्ग लगता है
0

असल में, आप दो अलग-अलग उपकरणों में प्रोग्राम चलाने के दौरान भी वही होने पर भरोसा नहीं कर सकते हैं, भले ही यह एक ही प्रोग्राम और ऑपरेटिंग सिस्टम का सटीक संस्करण हो।

उदाहरण के लिए, यदि आप एक आईपैड एयर पर प्रोग्राम चलाते हैं, तो NSDictionary के अंदर तत्वों का ऑर्डर करना आईपैड रेटिना पर एक ही प्रोग्राम चलाने के दौरान अलग हो सकता है, भले ही आईओएस संस्करण बिल्कुल वैसा ही हो।

संक्षेप में, NSDictionary में तत्वों के क्रम पर कभी भरोसा नहीं किया जाना चाहिए। आपको हमेशा यह मानना ​​चाहिए कि वे किसी भी अनिर्दिष्ट आदेश में हो सकते हैं, जो विभिन्न उपकरणों पर अलग हो सकता है।