¿Cómo unir elementos NSArray en un NSString?


126

Dado un NSArray de NSStrings, ¿hay una manera rápida de unirlos en un solo NSString (con un separador)?


Debo ser ciego! o cansado o ambos ...

2
Si busca en los documentos de NSString para esto, nunca lo encontrará. Está en NSArray!
bolnad

Respuestas:


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

Esta es la inversa de -[NSString componentsSeparatedByString:].



1

También existe esta variante, si su matriz original contiene objetos de valor clave de los que solo desea elegir una propiedad (que se puede serializar como una cadena):

@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

Hay una pérdida de memoria en su código, mutableCopy retiene el objeto que está copiando, por lo tanto, deberá devolver [liberación automática] al final. Además, no hay razón para hacer una mutablecopy en lugar de hacer una sarta mutable directamente desde el principio.
thewormsterror

@thewormsterror: olvidé mencionar que este código era para ARC. Además, la llamada mutablecopy es la convención moderna del objetivo c para crear una versión mutable de objetos usando @ -syntax (como [@ [] mutablecopy] para un nsarray mutable). No sé qué diferencia hace que el rendimiento sea inteligente.
Ben G
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.