Как присоединить элементы NSArray к NSString?


126

Учитывая NSArray NSStrings, есть ли быстрый способ объединить их в единый NSString (с разделителем)?


Я, должно быть, слепой! или устал. или оба ...

2
Если вы поищете это в документации NSString, вы никогда его не найдете. Это в NSArray!
bolnad

Ответы:


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

Это обратное -[NSString componentsSeparatedByString:].



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 сохраняет объект, который копирует, поэтому вам нужно будет сделать return [res autorelease] в конце. Также нет причин делать изменяемую копию вместо того, чтобы сразу же создавать изменяемую строку.
thewormsterror

@thewormsterror: забыл упомянуть, что этот код был для ARC. Кроме того, вызов mutablecopy - это современное соглашение objective-c для создания изменяемой версии объектов с использованием @ -синтаксиса (например, [@ [] mutablecopy] для изменяемого массива nsarray). не знаю, какая разница в производительности.
Ben G
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.