2009-06-19 11 views
6

NSDictionary कुंजी-मूल्य जोड़े के लिए अच्छा है, आपके पास तीन मान होने पर डेटा संरचना सबसे अच्छी है? उन 3 मानों के लिए कक्षा बनाने के लिए सबसे अच्छा है, और फिर प्रत्येक ऑब्जेक्ट को सरणी में उस वर्ग के उदाहरण होते हैं?यदि एनएस डिक्शनरी मूल्यों के लिए अच्छा है, तो ट्रिपल वैल्यू के लिए क्या अच्छा है?

विशिष्ट होना करने के लिए: डेटा संरचना, चलो यह व्यक्ति संपर्क कर सकें, मैं परिकल्पना तीन मूल्य हैं: (NSString) नाम, (int) उम्र, (bool) IsAlive

ये (सरणी में आयोजित की जाएगी?)। दोनों को नाम के रूप में नाम का उपयोग करने में सक्षम होना महत्वपूर्ण है, और शून्य से शुरू होने वाले पूरे ब्लॉक को एक संख्या के साथ भी देखें।

+1

क्या इस नई संरचना में 2 कुंजी और 1 मान या 1 कुंजी और 2 मान होंगे? या विनिमय करने योग्य? – samoz

+0

मुझे लगता है कि आपको प्रश्न को और अधिक अच्छी तरह से समझाने की आवश्यकता है। – U62

+1

हां, एनएस डिक्शनरी कुंजी-मूल्य जोड़े स्टोर करता है, लेकिन यह वास्तव में बिंदु नहीं है। जोड़े सममित नहीं हैं, आप इस बात पर विचार किए बिना "ट्रिपल" को सामान्यीकृत नहीं कर सकते हैं कि NSDictionary का पूरा * बिंदु * यह है कि कुंजी अद्वितीय हैं जबकि मानों की आवश्यकता नहीं है। तो आपके "ट्रिपल" में, तीन तत्वों में से कौन सा मूल्य वैल्यू जैसा है, और कौन सा महत्वपूर्ण है? – bendin

उत्तर

9

आप एक कुंजी और दो मानों है, तो आप शायद दो मानों के लिए एक वर्ग बन जाएगा और अभी भी एक शब्दकोश का उपयोग करें। यह है कि, एक शब्दकोश जहां कुंजी पहले महत्वपूर्ण है और मूल्य एक और शब्दकोश है -

आप दो कुंजी और एक मान हो, तो आप शायद एक नेस्टेड शब्दकोश का प्रयोग करेंगे। नेस्टेड डिक्शनरी की कुंजी दूसरी कुंजी होगी, और मान आपका वास्तविक मूल्य होगा।

ईटीए:

अब जब आपने अपने प्रश्न स्पष्ट किया गया है - आप दोनों कुंजी द्वारा या पूर्णांक सूचकांक द्वारा अपने संग्रह का उपयोग करने की जरूरत है, आप अभी भी एक शब्दकोश का उपयोग कर सकते हैं।

कुंजी के द्वारा एक आइटम प्राप्त करने के लिए, यदि आप ऐसा करते हैं:

[myDict objectForKey:@"joe"]; 

सूचकांक द्वारा एक आइटम पाने के लिए आपको allKeys सरणी इस्तेमाल कर सकते हैं:

[myDict objectForKey:[[myDict allKeys] objectAtIndex:1]]; 

हैं प्राप्त करने के लिए एकमात्र उद्देश्य इंडेक्स द्वारा लोग पूरे संग्रह पर लूपिंग कर रहे हैं, आप एक लूप में कुंजियों को गिनाने के लिए keyEnumerator विधि का उपयोग करने और मूल्यों को देखने के लिए उन चाबियों का उपयोग करने से बेहतर होगा।

-1

कि एक two dimensional सरणी का वर्णन नहीं है?

+0

आप एक सरणी के बारे में सोच रहे हैं जहां प्रत्येक तत्व 3 तत्वों के साथ सरणी से लिंक होता है। हालांकि, एक द्वि-आयामी सरणी के पास कुंजी-मूल्य जोड़े को संग्रहीत करने के लिए कुछ भी नहीं है - जिसके लिए एक शब्दकोश की आवश्यकता होती है, जिसे आप "मानचित्र", "सहयोगी सरणी", "हैश" आदि के रूप में भी संदर्भित कर सकते हैं। विशेष रूप से, NSDictionary 1 कुंजी से 1 मान के जोड़े का समर्थन करता है - वह 1 कुंजी से 3 मानों की तलाश में है। –

0

यह निर्भर करता है कि आप किसी प्रकार की सामान्यीकृत डेटा संरचना बनाने की कोशिश कर रहे हैं या नहीं। यदि 'एप' चीजें आपके ऐप के भीतर विशेष अवधारणाएं हैं तो आप domain model की ओर बढ़ रहे हैं - इस मामले में आप कक्षा में इन मानों को समाहित करने के लिए बुद्धिमान हो सकते हैं।

आप कार्यक्षमता की तरह शब्दकोश की आवश्यकता होती है - [NSDictionary objectForKey:] आदि - तो आप अब भी एक या अधिक शब्दकोशों का उपयोग कर सकते अनुक्रमित है कि अपने वर्ग उदाहरणों की कुंजी मान मैप के रूप में।

1

आप कोर डेटा का उपयोग एक संबंधपरक डेटाबेस मॉडल का उपयोग कर, और अधिक जटिल डेटा रिश्तों का प्रतिनिधित्व कर सकते हैं।

उदाहरण और दस्तावेज़ीकरण के लिए सेब की डेवलपर साइट देखें।

0

आप CoreData में देखने की जरूरत है (यदि आप इसे भंडारण कर रहे हैं) और अपने वस्तु के लिए एक वर्ग को परिभाषित। एनएस डिक्शनरी जैसी मूल जेनेरिक ऑब्जेक्ट्स जटिल मूल्यों को संग्रहीत करने के लिए नहीं हैं जो किसी व्यक्ति की तरह जटिल वस्तुओं को बनाती हैं।

Person *person = [[Person alloc] init]; 
person.firstName = @"blah"; 
person.age = 24; 
person.isAlive = YES; 
1

यह पहली बार असंबंधित लगते हैं, लेकिन इस Introduction to Cocoa Bindings में शब्दकोश उन्मुख संरचना की जाँच कर सकते हैं। (कोकोडेव सेंट्रल और स्कॉट स्टीवंसन नए कोको डेवलपर्स के लिए बहुत अच्छे संसाधन हैं।) वह जिस दृष्टिकोण का उपयोग करता है वह बेहद लचीला और सड़क को बदलने में आसान है।इवर के बजाए एक शब्दकोश का उपयोग करना हमेशा सबसे अच्छा समाधान नहीं है, लेकिन यह आपकी आवश्यकताओं के लिए एक अच्छा फिट हो सकता है।

नोट: जैसा कोर डाटा, कोको बाइंडिंग भी एक बहुत जटिल विषय है। मैं ट्यूटोरियल के केवल संगठनात्मक पहलू का उपयोग करने का सुझाव दे रहा हूं, बाइंडिंग के साथ बाहर नहीं जा रहा हूं। :-)

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