मैंने उसी समस्या में भाग लिया है जैसा कि in this question मिला है। हालांकि, मेरे पास एक फॉलो-अप प्रश्न है। मैं मूल प्रश्नकर्ता के समान स्थिति में प्रतीत होता हूं: मेरे पास शब्दकोशों के पदानुक्रम के साथ एक प्लिस्ट है जो कॉन्फ़िगरेशन स्क्रीन को परिभाषित करता है। ये उत्परिवर्तनीय और पूरे एप्लिकेशन में समान रहेंगे। चूंकि मूल चर्चा शब्दकोश को म्यूट करने से उत्पन्न होने वाली समस्याओं पर ध्यान केंद्रित करने लगती है, इसलिए मुझे अव्यवस्था के लिए पूछना चाहिए: क्या एक शब्दकोष का क्रम प्लस में जैसा ही है, जैसा कि इसे पढ़ा जाता है (initWithContentsOfFile के साथ)? यदि इस शब्द में कभी भी परिवर्तन नहीं होता है तो क्या मैं इस मामले में सभी कीज़ का उपयोग कर सकता हूं ताकि कुंजी का सही क्रम ऑर्डर प्राप्त हो सके?क्या NSDictionary कुंजी ऑर्डर प्रारंभिक रूप से गारंटीकृत है यदि यह कभी नहीं बदलेगा?
उत्तर
नहीं, कुंजी plist
फ़ाइल के समान क्रम में दिखाई देने की संभावना नहीं है। मैं हुड के नीचे नहीं देख सकता, लेकिन मुझे लगता है कि कुंजियों को किसी भी तरह से एक कुशल लुकअप प्रदान करने का आदेश दिया जाता है। allKeys
के लिए प्रलेखन का कहना है कि सरणी में तत्वों का क्रम परिभाषित नहीं किया गया है।
यदि आपको ऑर्डर बनाए रखने वाले NSDictionary
की आवश्यकता है, तो CHDataStructure's CHOrderedDictionary
पर एक नज़र डालें, जो वास्तव में ऐसा करता है। मैं इसका हर समय उपयोग करता हूं।
मुझे इसे आईफोन पर चाहिए, इसलिए कोको टच। मुझे आश्चर्य है कि यह उस पर चलता है? किसी भी मामले में, मैं अपने स्वयं के प्रश्न का उत्तर दूंगा: नहीं, NSDictionary स्पष्ट रूप से किसी भी क्रम में होने की उम्मीद नहीं की जा सकती है। तो, मैं वही कर रहा हूं जो मैंने दूसरों को सुझाव दिया है: ऑर्डर और कुंजी "_order" के साथ एक सरणी शामिल करें। लोग यह कह रहे हैं कि यह गुंजाइश डबल डेटा-रख-रखाव उनकी राय में बिल्कुल नहीं है। हालांकि, अभी भी गुंजाइश है। – Thaurin
हां, सीएचडीटा संरचनाएं मैक और आईफोन दोनों पर चलती हैं। –
मुझे नहीं लगता कि चाबियाँ किसी भी प्रकार के क्रम में होंगी क्योंकि allKeys
आदेश की गारंटी नहीं देता है।
आंतरिक रूप से, NSDictionary
uses a hash table।
सरणी में तत्वों का क्रम निर्धारित नहीं है।
यदि आप कुछ क्रम में मान प्रदर्शित करना चाहते हैं तो कुंजी प्राप्त करें, कुंजी सरणी को सॉर्ट करें और फिर प्रत्येक कुंजी के लिए मान प्राप्त करें।
कुछ भी पर कुछ भी आदेश के बारे में गारंटी नहीं है। यह भी गारंटी नहीं है कि दो बार एक शब्दकोश को फिर से शुरू करने से आपको एक ही क्रम में चाबियाँ मिलेंगी।
मेरा ऐप उन्हें प्लेस्ट के समान क्रम में दिखाता है, जो मैंने सोचने के कारणों में से एक था। लेकिन अब मुझे पता है कि यह अनिर्धारित nonetheles है। – Thaurin
मेरे ऐप में वे हमेशा एक ही क्रम में दिखाई नहीं देते हैं - उस समय पढ़ने वाले प्लास्ट पर निर्भर करता है। – xcoder