2012-03-05 14 views
8

मैं उद्देश्य-सी के लिए बिल्कुल नया हूं और मैं आज एनएसडीयूज के साथ काम कर रहा था और ऑलकेस विधि में आया था। जैसा कि मैं समझता हूं, यह एक यादृच्छिक क्रम में शब्दकोश के लिए कुंजी युक्त एनएसएआरआरए देता है। हालांकि, यह आदेश हमेशा एक ही है? यानी, अगर मैं पंक्ति में 20 बार एक ही शब्दकोष पर सभी बार कॉल करता हूं तो क्या मुझे परिणामों का एक ही क्रम प्राप्त करने की गारंटी है?NSDictionary allKeys - क्या यह हमेशा एक ही ऑर्डर देता है?

धन्यवाद,

उत्तर

8

आप एक शब्दकोश जाता है कि उत्परिवर्तित नहीं किया जा रहा पर विधि एक पंक्ति में 20 बार फोन करते हैं, यह सबसे अधिक संभावना उसी क्रम वापस आ जाएगी। उस ने कहा, मैं आपको इस पर भरोसा करने से दृढ़ता से हतोत्साहित करता हूं, क्योंकि यह कार्यान्वयन के विवरण पर अत्यधिक निर्भर है। एकमात्र कारण यह है कि मैं कह रहा हूं कि यह संभवतः एक ही ऑर्डर लौटाएगा क्योंकि को किसी आंतरिक संरचना को म्यूट नहीं करना चाहिए, और उत्परिवर्तन की अनुपस्थिति में, एक अलग आदेश प्राप्त करने का एकमात्र अन्य तरीका स्पष्ट रूप से होना चाहिए नोडेटर्मिनिज्म का परिचय दें, यानी वैश्विक स्थिति पर भरोसा करना, जैसे यादृच्छिक संख्या जेनरेटर या सीपीयू की घड़ी, और मुझे यह बेहद संदिग्ध लगता है कि NSDictionary इनमें से कोई भी है।

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

+0

जब तक NSDictionary निश्चित रूप से आलसी rehashing, जिस स्थिति में एक पहुँच एक मिलावत को चालू कर सकते है। –

+0

@Catfish_Man: अगर ऐसा होता है, तो कभी भी किसी अन्य धागे को 'NSDictionary' पास करना सुरक्षित नहीं होगा। वर्तमान ज्ञान यह निर्देश देता है कि थ्रेड के बीच 'एनएसडीयूजी' पास करना सुरक्षित है जब तक कि शब्दकोश अपरिवर्तनीय न हो। –

+0

एक अपरिवर्तनीय शब्दकोश को कभी-कभी पॉप्युलेट किए जाने के बाद कभी भी पीछे हटना नहीं चाहिए, क्योंकि इसके बारे में कुछ भी नहीं बदला जा सकता है। मैं एक उत्परिवर्ती का जिक्र कर रहा था। –

0

तरीका यह पता लगाने की एक त्वरित परीक्षण प्रोग्राम लिखने के लिए है। वास्तव में, आपको इस तरह गैर-गारंटीकृत, गैर-दस्तावेज परिणामों पर भरोसा नहीं करना चाहिए। यह खराब प्रोग्रामिंग अभ्यास है, और एक नई ओएस रिलीज के साथ तोड़ने की काफी संभावना है।

यदि आपको किसी विशेष क्रम में आने वाली कुंजियों की आवश्यकता है, तो आपको उन्हें पुनर्प्राप्त करने के बाद उन्हें सॉर्ट करना चाहिए। आप इसे -[NSArray sortedArrayUsing...] विधियों के समूह के साथ कर सकते हैं।

1

NSDictionary ऑब्जेक्ट्स प्रदर्शन को बनाए रखने के लिए अनियंत्रित हैं।

आप एक आदेश दिया शब्दकोश की जरूरत है, इस परियोजना को देखो:

http://code.google.com/p/cocoa-sorted-dictionary/

+0

मैं इसे देख लूंगा धन्यवाद। – KerrM

संबंधित मुद्दे