2009-06-22 8 views
6

मान लें कि मेरे पास NSDictionaries है जो 10 तत्व लंबा है। मैं प्रत्येक शब्दकोष पर एक कुंजी के मानों के साथ दूसरा NSArray बनाना चाहता हूं। सबसे अच्छा तरीका है मैं लगा सकते हैं यह करने के लिए है:मौजूदा एनएसएआरएआरई से नया एनएसएआरएआर बनाने के लिए मानक सम्मेलन क्या है?

NSMutableArray *nameArray = [[NSMutableArray alloc] initWithCapacity:[array count]]; 
    for (NSDictionary *p in array) { 
     [nameArray addObject:[p objectForKey:@"name"]]; 
    } 
    self.my_new_array = array; 
    [array release]; 
    [nameArray release]; 
} 

लेकिन सिद्धांत रूप में, मैं एक अस्थायी सरणी का उपयोग नहीं और [nameArray addObjectAtIndex:count] साथ संयोजन के रूप में एक काउंटर का उपयोग कर के साथ भाग प्राप्त करने में सक्षम होना चाहिए, क्योंकि नई सूची होना चाहिए बिल्कुल पुरानी सूची के रूप में। कृपया ध्यान दें कि मैं मूल सरणी के सबसेट के लिए फ़िल्टर करने की कोशिश नहीं कर रहा हूं, लेकिन सरणी में प्रत्येक तत्व की कुछ मनमानी विशेषता से ड्रेज किए गए मानों के साथ, तत्वों की बिल्कुल उसी संख्या के साथ एक नई सरणी बना रहा हूं।

अजगर में एक इस तरह इस समस्या को हल कर सकते हैं:

new_list = [p['name'] for p in old_list] 

या यदि आप एक masochist, इस तरह थे:

new_list = map(lambda p: p['name'], old_list) 

उद्देश्य-सी में थोड़ा अधिक स्पष्ट रूप से करने के बाद मुझे बनाता आश्चर्य है कि इन स्थितियों को संभालने का एक स्वीकार्य आम तरीका है या नहीं।

उत्तर

11

इस विशेष मामले कोको संक्षिप्तता :)

NSArray *newArray = [array valueForKey:@"name"]; 

में भी मात नहीं है NSArray प्रलेखन से में:

valueForKey:

की परिणाम युक्त एक सरणी देता है invoking valueForKey: प्रत्येक रिसीवर की वस्तुओं पर कुंजी का उपयोग करना।

+1

यह बहुत अच्छा है, धन्यवाद! – Prairiedogg

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