NSArray तत्वों को NSString में कैसे शामिल करें?


126

NSStrings के NSArray को देखते हुए, क्या उन्हें एक एकल NSString (एक विभाजक के साथ) में एक साथ मिलाने का एक त्वरित तरीका है?


मैं अंधा होना चाहिए! या थका हुआ। या दोनों ...

2
यदि आप इसके लिए NSString डॉक्स खोजते हैं, तो आप इसे कभी नहीं पाएंगे। NSArray में इसका!
बोलनाद

जवाबों:


314
NSArray * stuff = /* ... */;
NSString * combinedStuff = [stuff componentsJoinedByString:@"separator"];

यह उलटा है -[NSString componentsSeparatedByString:]



1

यह संस्करण भी है, यदि आपके मूल सरणी में की-वैल्यू ऑब्जेक्ट हैं जिसमें से आप केवल एक संपत्ति चुनना चाहते हैं (जिसे एक स्ट्रिंग के रूप में क्रमबद्ध किया जा सकता है):

@implementation NSArray (itertools)

-(NSMutableString *)stringByJoiningOnProperty:(NSString *)property separator:(NSString *)separator
{
    NSMutableString *res = [@"" mutableCopy];
    BOOL firstTime = YES;
    for (NSObject *obj in self)
    {
        if (!firstTime) {
            [res appendString:separator];
        }
        else{
            firstTime = NO;
        }
        id val = [obj valueForKey:property];
        if ([val isKindOfClass:[NSString class]])
        {
            [res appendString:val];
        }
        else
        {
            [res appendString:[val stringValue]];
        }
    }
    return res;
}


@end

आपके कोड में एक मेमोरी लीक है, mutableCopy उस ऑब्जेक्ट को बनाए रखता है जिसे वह कॉपी कर रहा है, इसलिए आपको अंत में रिटर्न [Res autorelease] करना होगा। इसके अलावा सिर्फ बल्ले से सीधा म्यूटैब्लस्ट्रिंग करने के बजाय म्यूटेब्लॉपी करने का कोई कारण नहीं है।
द ग्रेटस्टेरर

@thewormsterror: ARC के लिए इस कोड का उल्लेख करना भूल गया। इसके अलावा, mutablecopy कॉल @ -syntax (जैसे [@ [] [mutablecopy] एक उत्परिवर्ती nsarray के लिए) का उपयोग करके वस्तुओं के उत्परिवर्ती संस्करण बनाने के लिए आधुनिक उद्देश्य-सी सम्मेलन है)। पता नहीं क्या फर्क पड़ता है कि प्रदर्शन अच्छा है।
बेन जी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.