2013-01-24 82 views
5

मैं NSDictionary पर ऑब्जेक्ट्स जोड़ने के तरीके को कैसे संरक्षित कर सकता हूं?आदेश दिया गया NSDictionary

मुझे एहसास है कि NSDictionary में मूल्यों के लिए कोई विशिष्ट आदेश नहीं है, लेकिन मेरे मामले में मुझे उस क्रम को संरक्षित करने की आवश्यकता है जिसे मैं setValue:forKey: का उपयोग करके सरणी की तरह जोड़ता हूं।

मैं यह कैसे कर सकता हूं?

किसी भी मदद की सराहना की।

उत्तर

2

शब्दकोश हैश को तेजी से पुनर्प्राप्ति के लिए मैप किया गया है। आपको इसके आदेश को ठीक करने की अनुमति नहीं है।

आप आप सरणियों का उपयोग करना चाहिए में संग्रहीत करना चाहते हैं।

या आप, कुछ जटिल तरीके से उपयोग एक int orderNumber जोड़कर पर रखने के लिए कुंजी के साथ (आप हर setObject/setValue के बाद यह बढ़ाने के लिए की जरूरत है)। भंडारण और पुनर्प्राप्ति के रूप में:

NSDictionary *dict=[NSDictionary new]; 
NSString *key=....; 
[dict setValue:@"some value" forKey:[NSString stringWithFormat:@"%d-%@",orderNumber, key]]; 

वैकल्पिक रूप से आप एक सरणी सूचकांक प्रति एक शब्दकोश होने का उपयोग कर सकते हैं।

बहुत मैं क्या एक साल पहले पोस्ट के समान पाया जाता है, यह OrderedDictionary देखें:


एक और तरीका है के रूप में

@interface .... 
    @property(...) NSInteger index; 
    @property(...) NSString *key; 
    @property(...) id object; 
    // and methods to retrieve based on key, based on index etc 
@end 

संपादित करें 2 एक कस्टम वर्ग का उपयोग करने के लिए होगा।

+0

मैं मैं सरणियों इस्तेमाल कर सकते हैं एहसास है, लेकिन मैं दोनों कुंजी और मूल्यों, जो कुछ NSArray की अनुमति नहीं है स्टोर करने के लिए की जरूरत है। –

+0

हाँ मुझे पता था, अब मैंने अपना जवाब अपडेट कर दिया है .. –

0

कुछ इस तरह:

static int index; 
[myDictionary setValue:someValue forKey:[NSString stringWithFormat:@"key%d", index++]]; 
0

आप या तो करना होगा:

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

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