2015-08-14 4 views
5

मैं NSArray *x = @[@1, @2, @3, @4];उद्देश्य सी में स्विफ्ट के .map के समतुल्य?

है कहो अब कहते हैं कि मैं @[@2, @4, @6, @8]

अच्छा OLE स्विफ्ट में की तरह एक सरणी चाहते हैं, मैं सिर्फ कर सकते हैं:

xDoubled = x.map({($0) * 2}) 

कोई मुझे बता सकते हैं कि कैसे मैं उद्देश्य से कर सकते हैं -सी बिना किए -

NSMutableArray *xDoubled = [NSMutableArray new]; 
for (NSInteger xVal in x) { 
    [xDoubled addObject:xVal * 2]; 
} 

?

+1

http://www.openradar.me/radar?id=5364414152704000 (और मेरा एक बहुत पुराना अनुरोध का डुप्लिकेट है)। आज कोको में कोई नक्शा विधि नहीं है। –

उत्तर

3

NSArray में map विधि नहीं है। इसमें enumerateObjectsUsingBlock: विधि (और संबंधित वाले) हैं जो कुछ समान करते हैं; वे स्वचालित रूप से किसी ऑब्जेक्ट को दूसरे में परिवर्तित नहीं करते हैं और एक और सरणी वापस नहीं करते हैं, लेकिन आप इसे मैन्युअल रूप से आसानी से कर सकते हैं। हालांकि, वे आपके उदाहरण से बहुत अलग नहीं हैं।

मैं एक पुस्तकालय collections कहा जाता है कि NSArray, NSDictionary, और NSSet के लिए एक मानचित्र विधि (और अन्य संग्रह उन्मुख तरीकों) कहते हैं लिखा था, हालांकि।

1

मुझे जरूरी नहीं है कि आप इसकी अनुशंसा करते हैं, लेकिन आप श्रेणियों और कुंजी-मूल्य कोडिंग का लाभ उठाने वाली कुछ भयानक चीजें कर सकते हैं।

@interface NSNumber (DoubledValue) 
- (NSNumber*) doubledValue; 
@end 

@implementation NSNumber (DoubledValue) 
- (NSNumber*) doubledValue 
{ 
    return @([self doubleValue] * 2); 
} 
@end 

xDoubled = [x valueForKey:@"doubledValue"]; 

सामान्य तौर पर, किसी भी आपरेशन है कि वस्तु, map() के आदिम रूप के रूप में कार्य करता है -valueForKey[Path]: की संपत्ति के लिए एक महत्वपूर्ण या कुंजी पथ के रूप में व्यक्त किया जा सकता के लिए: उदाहरण के लिए।

+0

यह बहुत साफ है और वास्तव में यह पूरा करता है कि ओपी मेरी राय में क्या चाहता है। उसके लिए धन्यवाद। –

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