Як приєднати елементи NSArray до NSString?


126

Враховуючи NSArray NSStrings, чи існує швидкий спосіб об'єднати їх в єдиний NSString (з роздільником)?


Я повинен бути сліпим! або втомився. або обидва ...

2
Якщо ви шукаєте документи NSString для цього, ви їх ніколи не знайдете. Його в NSArray!
болнад

Відповіді:


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

@thewormsterror: забув згадати, що цей код був для ARC. Крім того, виклик mutablecopy - це сучасна умова-c умовою для створення змінної версії об'єктів за допомогою @ -синтаксу (наприклад, [@ [] mutablecopy] для мутаційного nsarray). не знаю, яка різниця робить розумну роботу.
Бен Г
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.