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)?


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:].



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

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.