दो सरणियों सिंक्रनाइज़ रखने के लिए कोशिश कर रहा बस मुसीबत के लिए पूछ रहा है। यह निश्चित रूप से किया जा सकता है, लेकिन जब भी आप एक सरणी को संशोधित करते हैं, तो आपको दूसरे में एक समान परिवर्तन करना याद रखना होगा। अपने आप को एक पक्ष बनाओ और डेटा संग्रहित करने के तरीके पर पुनर्विचार करके उस बग की पूरी कक्षा से बचें।
इस मामले में, आपके पास एक {व्यक्ति, बूलियन} जोड़ी है। एक विकल्प प्रत्येक जोड़ी को एक शब्दकोश के रूप में स्टोर करना है, और फिर उन शब्दकोशों की एक सरणी रखना है। यदि आप दोनों के पास डेटा के टुकड़ों की संख्या का विस्तार कर सकते हैं तो यह एक विशेष रूप से अच्छी योजना होगी। एक अन्य विकल्प केवल एक शब्दकोश का उपयोग करना होगा जहां कुंजी व्यक्ति के नाम हों और मान आपके हां/नहीं मान हैं। यह आपके सवाल का जवाब बहुत सरल बनाता है:
NSString *yesOrNo = [personDictionary objectForKey:personName];
वापस अपने मूल प्रश्न, आप अभी भी दो सरणियों है जहां के लिए हो रही है, सबसे आसान करने के लिए बात व्यक्ति सरणी पर पुनरावृति जब तक आप को मिल रहा है जिस व्यक्ति को खोज रहे हैं, वह नाम के सूचकांक मिलता है, और फिर हाँ में संबंधित मान को देखने/कोई सरणी:
for (person in peopleArray) {
if ([person isEqualToString:thePersonYoureLookingFor]) {
yesNoValue = [yesNoArray objectAtIndex:[peopleArray indexOfObject:person];
break;
}
}
यह ठीक है कि अगर सूची में लोगों की संख्या बहुत बड़ी नहीं है । यदि सूची बड़ी हो सकती है, तो आप व्यक्ति सरणी को सॉर्ट करना चाहेंगे ताकि आप बाइनरी खोज कर सकें। हालांकि, समस्या यह है कि आप हां/नहीं सरणी अलग हैं, इसलिए व्यक्ति को सॉर्ट करना सही क्रम में हाँ/नहीं सरणी रखने के दौरान जटिल हो जाता है।
क्या आप नाम सरणी को क्रमबद्ध या छोड़े गए हैं? –
@ बेवारियस अनसोर्टेड, लेकिन यह सर्वर द्वारा उत्पन्न होता है इसलिए कोई डुप्लीकेट नहीं होता है। पेंगने ने हालांकि मेरे प्रश्न का उत्तर दिया। मैं indexOfObject विधि की तलाश में था। – Preston