NSArray öğeleri bir NSString'e nasıl katılır?


126

NSArray of NSStrings verildiğinde, bunları tek bir NSString'de (Separator ile) birleştirmenin hızlı bir yolu var mı?


Kör olmalıyım! ya da yorgun. ya da her ikisi ...

2
Bunun için NSString belgelerinde arama yaparsanız, onu asla bulamazsınız. NSArray'de!
bolnad

Yanıtlar:


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

Bu tersidir -[NSString componentsSeparatedByString:].



1

Ayrıca, orijinal diziniz yalnızca bir özellik seçmek istediğiniz Anahtar-Değer nesneleri içeriyorsa (bir dize olarak serileştirilebilir) bu değişken vardır:

@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

Kodunuzda bellek sızıntısı var, mutableCopy kopyaladığı nesneyi tutar, bu nedenle sonunda [res autorelease] döndürmeniz gerekir. Ayrıca, doğrudan yarasadan bir mutablesting yapmak yerine, mutablecopy yapmak için hiçbir neden yoktur.
thewormsterror

@thewormsterror: Bu kodun ARC için olduğunu söylemeyi unuttum. Ayrıca, mutablecopy çağrısı, @-sözdizimi kullanarak nesnelerin değiştirilebilir bir versiyonunu oluşturmak için modern objektif-c konvansiyonudur (değişebilir bir nsarray için [@ [] mutablecopy] gibi). performansı akıllıca kılan ne fark bilmiyorum.
Ben G
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.