2009-08-14 5 views
27

में एनएसएआरआरएआर विलय करना मेरे पास एक NSDictionary है जहां प्रत्येक कुंजी एक सरणी को इंगित करती है। मैं बाद में सभी मानों को एक सरणी में विलय करना चाहता हूं। वहाँ का कहना है कि तुलना में अधिक कुशल कुछ करने के लिए एपीआई का उपयोग करने का कोई तरीका है:उद्देश्य-सी

NSArray *anArray = [someDictionary allValues]; 
NSMutableArray *newArray = [NSMutableArray array]; 
start outter loop on anArray 
    start inner loop on objects in anArray 
    add objectAtIndex to newArray 
+0

उत्तर में http://stackoverflow.com/q/8569388/78336 – neoneye

उत्तर

59

बस [newArray addObjectsFromArray:anArray];

+0

हाय बेन, अगर मैं ऐसा करता हूं तो मेरे पास एक फ्लैट सरणी नहीं है। मेरे पास सरणी की एक सरणी है। मैं देख रहा था कि लूपिंग के बिना ऐसा करना संभव था। – Coocoo4Cocoa

+1

यह आपको अभी भी एक फ्लैट सरणी देना चाहिए; आप सरणी नहीं जोड़ रहे हैं, आप सरणी से ऑब्जेक्ट्स जोड़ रहे हैं। –

+1

Coocoo4Cocoa: मुझे लगता है कि आपने 'addObject' ** 'FromArray:' ** को 'addObject:' के साथ भ्रमित कर दिया है। 'addObject:' नई सरणी में * सरणी * जोड़ता है, जबकि चक और बेन गॉटलिब ने सुझाव दिया है कि सरणी में तत्वों को नए सरणी में जोड़ दें। –

21
+0

मुझे खुशी है कि किसी ने कक्षा के प्रकार को इंगित किया है। मैं एक दूसरे के लिए वहां बैठकर सोच रहा था कि विधि ऑटो-पूर्ण क्यों नहीं हो रही थी। डॉक्स के लिंक के लिए – drewish

+0

+1 :) – emrahgunduz

19

वहाँ ऊपर बेन Gottlieb के जवाब में कुछ भ्रम की स्थिति है का उपयोग करें। स्पष्टीकरण के लिए, वह आंतरिक लूप के बजाय addObjectsFromArray का उपयोग करने का सुझाव दे रहा है, जबकि कोको भ्रमित है क्योंकि उसे लगता है कि यह सभी लूपिंग के प्रतिस्थापन के रूप में सुझाव दिया जा रहा है। (यदि आप ऐसा करते हैं, तो आप वास्तव में उसकी आपत्ति के अनुसार सरणियों के एक unflattened सरणी के साथ छोड़ दिया जाएगा।)

यहाँ एक यथोचित सुरुचिपूर्ण समाधान है कि किसी भी स्पष्ट पाशन की आवश्यकता नहीं है है:

NSArray *anArray = [someDictionary allValues]; 
NSArray *flattenedArray = [anArray valueForKeyPath: @"@unionOfArrays.self"]; 

btw यह कोड flattened सरणी में डुप्लिकेट छोड़ देगा। यदि आप डुप्लीकेट को हटाना चाहते हैं, तो अलग-अलग यूऑनऑफ्रेयूनियनऑफएर्रे के बजाय उपयोग करें।

+6

आज, यह उपरोक्त सभी की तुलना में एक बेहतर समाधान है। – Cezar