Bagaimana cara bergabung dengan elemen NSArray ke dalam NSString?

126

Diberikan NSArray dari NSStrings, apakah ada cara cepat untuk bergabung bersama mereka menjadi NSString tunggal (dengan Pemisah)?


sumber
Saya pasti buta! atau lelah. atau keduanya ...
2
Jika Anda mencari dokumen NSString untuk ini, Anda tidak akan pernah menemukannya. Ada di NSArray!
bolnad

Jawaban:

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

Ini kebalikan dari -[NSString componentsSeparatedByString:].

Dave DeLong
sumber
1

Ada juga varian ini, jika array asli Anda berisi objek Key-Value dari mana Anda hanya ingin memilih satu properti (yang dapat diserialisasi sebagai string):

@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
Ben G
sumber
Ada kebocoran memori dalam kode Anda, mutableCopy mempertahankan objek yang sedang disalin, maka Anda harus mengembalikan [res autorelease] di akhir. Juga tidak ada alasan untuk melakukan mutablecopy bukan hanya membuat mutablestring langsung dari kelelawar.
thewormsterror
@thewormsterror: lupa menyebutkan kode ini untuk ARC. Selain itu, panggilan mutablecopy adalah konvensi objektif-c modern untuk membuat versi objek yang dapat diubah menggunakan @ -syntax (seperti [@ [] mutablecopy] untuk nsarray yang dapat diubah). tidak tahu apa bedanya itu membuat kinerja bijaksana.
Ben G