2009-10-30 18 views
12

शीर्षक, जब मैं (जैसे क्रम में: k1, k2, K3) उद्देश्य-सी में एक शब्दकोश में तत्व सम्मिलित रूप में:उद्देश्य-सी शब्दकोश एक आदेश दिया गया कंटेनर है?

for (k in dictionary){ 
    // output the k - value 
} 

यह दिखाते थे, वहाँ किसी भी गारंटी नहीं है कि जब मैं यह बताना चाहते है इसी क्रम में?

उत्तर

21

नहीं, NSDictionary इसकी चाबियों का सम्मिलन आदेश बनाए रखता नहीं है।

आप एक शब्दकोश है कि प्रविष्टि व्यवस्था को बनाए रखता की जरूरत है, मैं CHDataStructures framework है, जो एक CHOrderedDictionary वर्ग (यह NSMutableDictionary के वंशज है) है का उपयोग करते हुए सुझाव देना चाहेंगे। CHOrderedDictionary के लिए प्रलेखन कहता है:

एक शब्दकोश जो क्रम में कुंजी डालने के क्रम में कुंजी को दर्शाता है।

निम्नलिखित अतिरिक्त संचालन आदेश का लाभ लेने के प्रदान की जाती हैं:

-firstKey

-lastKey

-keyAtIndex:

-reverseKeyEnumerator

की-मूल्य प्रविष्टियों मौजूदा कुंजी के लिए मूल्यों के प्रतिस्थापन सहित, सामान्य शब्दकोश के रूप में डाले गए हैं, जैसा कि विस्तृत - setObject: forKey :. हालांकि, सम्मिलन आदेश को ट्रैक करने के समानांतर में एक अतिरिक्त संरचना का उपयोग किया जाता है, और उस क्रम में कुंजियों की गणना की जाती है। यदि जोड़ा जाने वाला एक कुंजी वर्तमान में शब्दकोश में मौजूद नहीं है, तो यह सूची के अंत में जोड़ा जाता है, अन्यथा कुंजी का सम्मिलन क्रम बदल नहीं जाता है।

+1

केवल पूर्णता के लिए ... यह एक पुस्तकालय है, ढांचा नहीं है! चीयर्स ... – stk

4

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

11

NSDictionary की कुंजियों क्रम में नहीं रखा जाता, लेकिन आप उन्हें पाने के लिए और उन्हें सॉर्ट कर सकते हैं, ई जी:

for (key in [[myDict allKeys] sortedArrayUsingSelector:@selector(compare:)]) 
... 
+1

त्वरित और आसान, धन्यवाद। लेकिन क्या एप्लिकेशन को लूप के माध्यम से हर बार सॉर्टिंग ऑपरेशन करना पड़ता है? यदि ऐसा है, तो मैं एक बार सॉर्ट करता हूं और उस परिणाम को एक चर में डालता हूं, फिर परिवर्तनीय पर फिर से चला जाता हूं। – arlomedia

+2

@arlomedia नहीं, लूप के लिए पहले संग्रह अभिव्यक्ति का मूल्यांकन किया जाता है, फिर परिणामस्वरूप पुनरावृत्त होता है। तो सॉर्टिंग केवल इस उदाहरण में एक बार होता है। –

+1

प्रश्न आदेश (प्रविष्टि आदेश में) के लिए पूछता है, – user102008

4

कुछ मैं मामले में किसी को जोड़ना चाहते हैं इस धागे पर इस और stumbles लिए खोज रहा है:

वहाँ आदेश दिया शब्दकोशों के लिए काम के आसपास एक नहीं बल्कि आसान है, और है कि हवलदार है एक ऐरे में डालना, जिसमें आपके इच्छित क्रम में चाबियां शामिल हैं। फिर एक अनियंत्रित शब्दकोश होने पर, आप सरणी से चाबियों का उपयोग करके प्रत्येक कुंजी तक पहुंच सकते हैं:

NSString *key = [arrayOfKeys objectAtIndex:0]; 
NSString *stringAtIndexZero = [unorderedDictionary objectForKey:key]; 
संबंधित मुद्दे