2012-02-23 17 views
13

एक शब्दकोश और एक सरणी के बीच क्या अंतर है, खासकर जब पीएलआईएसटी फाइलों के साथ काम करते हैं? दूसरे पर एक का उपयोग करने के क्या फायदे हैं? धन्यवाद!शब्दकोश और सरणी के बीच क्या अंतर है?

उत्तर

31

NSDictionary और NSArray संग्रह कक्षाएं हैं, यानी समूह अन्य वस्तुओं के साथ हैं।

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

एक एनएसएससेट एक 'अनियंत्रित संग्रह' है - प्रत्येक आइटम बैग में दिखाई देता है, ऑर्डर कोई फर्क नहीं पड़ता और ऑब्जेक्ट बैग में एक बार मौजूद हो सकता है।

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

जब पीएलआईएसटी, सरणी और शब्दकोश पार्सिंग आप मुख्य प्रकार के साथ काम करते हैं। जब आप एक्सकोड में एक PLIST संपादित करते हैं - यदि आप कुछ ऐरे प्रकार के रूप में सेट करते हैं, तो उसके सभी बच्चों को "आइटम 0, आइटम 1, आइटम 2 ..." के रूप में सूचीबद्ध किया गया है, जबकि यदि आप इसे एक शब्दकोश प्रकार के रूप में सेट करते हैं, तो यह है बच्चे महत्वपूर्ण हैं: मूल्य जोड़े।

अंतर प्रकारों के लिए एक महत्वपूर्ण उपयोग केस निम्नानुसार है।

एक पत्रिका एप्लिकेशन की कल्पना करें जिसमें कई लेख शामिल हैं। लेखों का क्रम महत्वपूर्ण है, और इसलिए आप प्रत्येक लेख को सरणी में संग्रहीत करेंगे। यदि आप लेखों के क्रम को बदलना चाहते हैं, तो आप प्लेस्ट में सरणी के क्रम को बदल देंगे।

लेखों को स्वयं शब्दकोशों द्वारा प्रदर्शित किया जा सकता है, शायद "टेक्स्टफाइल", "पृष्ठभूमि", "आलेख टाइप" जैसे कुंजी शामिल हैं। आप एक शब्दकोश का उपयोग करते हैं क्योंकि आप भविष्य में किसी बिंदु पर शब्दकोश में अधिक जानकारी जोड़ सकते हैं, और कुंजी: मूल्य तंत्र आपके कोड को समझने योग्य बनाता है।

+0

धन्यवाद यह समझाने के लिए बहुत कुछ! यह वास्तव में मदद की। –

+0

धन्यवाद। यह मेरा समय बचा है। – Raja

4

एक सरणी वस्तुओं की एक क्रमबद्ध सूची है। एक शब्दकोश कुंजी-मूल्य जोड़े स्टोर करता है।

उदाहरण के लिए:

Array: obj1, obj2, ob3, ... 

शब्दकोश:

{ 

    @"Name": @"Bob" 

    @"Age": 20 (but NSDictionary can only store objects, so that would be a NSNumber) 

} 

कोई लाभ या हानि, वे सिर्फ दो डाटा संरचनाओं रहे हैं, और आप अपनी आवश्यकतानुसार का उपयोग कर रहे हैं।

2

शब्दकोश एक कुंजी (ऑब्जेक्ट) के साथ एक कुंजी को जोड़ते हैं और वस्तुओं के क्रम को सुरक्षित नहीं करते हैं। सूचकांक द्वारा ऐरे का उपयोग किया जाता है - ऑर्डर संरक्षित है। PLIST डेटा (कुंजी, मान जोड़े) को परिभाषित करने के लिए उपयोग XML का उपयोग करने की क्षमता जोड़ें।

-2

NSDictionary अपनी 'मान' ऑब्जेक्ट्स को बरकरार नहीं रखता है, लेकिन एनएसएमयूटेबलएरे इसमें जोड़े गए ऑब्जेक्ट्स को बनाए रखता है। अधिक जानकारी के लिए NSDictionary और NSArray

+1

यह गलत है - NSDictionary इसके मानों को बरकरार रखता है, लेकिन इसकी चाबियाँ नहीं। – ikuramedia

4

मुख्य अंतर यह है कि आप उनके भीतर कैसे पहुंच सकते हैं।

दोनों सरणी और शब्दकोश कंटेनर हैं और अनुक्रमिक रूप से पढ़ा जा सकता है (उदाहरण के लिए सरणी को किसी कुंजी के माध्यम से इंडेक्स और शब्दकोश के माध्यम से समझा जा सकता है)। लेकिन जबकि एरे ऑब्जेक्ट्स ऑर्डर ऑब्जेक्ट्स को बनाए रखते हैं, शब्दकोश नहीं।

इसके अतिरिक्त, शब्दकोशों के साथ आपको एक विशिष्ट कुंजी के साथ एक विशिष्ट कुंजी के साथ एक अधिक उपयोगकर्ता के अनुकूल तरीके (एक निमोनिक) में एक विशिष्ट वस्तु का उपयोग करने की संभावना है। उदाहरण के लिए एक शब्दकोश में आप निश्चित रूप से जानते हैं कि एक विशिष्ट कुंजी के साथ, "टेक्स्ट" कहें, एक विशिष्ट वस्तु से जुड़ा हुआ है, NSString कहें। यह एक सरणी के लिए मान्य हो सकता है लेकिन कुछ कठिनाइयों के साथ। उदाहरण के लिए, आप कैसे सुनिश्चित हैं कि इंडेक्स 0 पर विशिष्ट ऑब्जेक्ट NSString है?

आपके प्रश्न के बारे में और जहां तक ​​मुझे पता है (एक्सकोड 4 के बाद से), प्लिस्ट्स रूट ऑब्जेक्ट को एक शब्दकोश के रूप में रखते हैं। अधिक जानकारी के लिए how-do-you-change-a-plists-root-object-type-to-nsarray-in-xcode-4 देखें।

उम्मीद है कि यह मदद करता है।

-1

NSDictionary उपयोगी है जब आप किसी विशेष कुंजी मान को एक्सेस करना चाहते हैं। जब आप एक सेकंटियल डेटा तक पहुंचना चाहते हैं तो एनएसएरे उपयोगी होता है।