NSArray要素をNSStringに結合する方法は?


126

NSStringのNSArrayが与えられた場合、それらを単一のNSString(セパレーター付き)に結合する簡単な方法はありますか?


私は盲目でなければなりません!または疲れた。または両方...

2
これについてNSStringのドキュメントを検索しても、決して見つかりません。NSArrayにあります!
bolnad 14

回答:


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

これはの逆です-[NSString componentsSeparatedByString:]



1

元の配列に1つのプロパティ(文字列としてシリアル化できる)のみを選択するKey-Valueオブジェクトが含まれている場合、このバリアントもあります。

@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 2013

@thewormsterror:このコードがARC用であることに言及するのを忘れていました。また、mutablecopy呼び出しは、@構文を使用してオブジェクトの可変バージョンを作成するための最新のObjective-C規則です(可変nsarrayの[@ [] mutablecopy]など)。それがパフォーマンスにどのような違いをもたらすかはわかりません。
ベンG
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.