2009-09-07 13 views
119

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

+0

que debe ser ciego! o cansado o ambos ... – hop

+2

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

Respuesta

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

Esto es el contrario de -[NSString componentsSeparatedByString:].

+1

oh por amor a la verbosidad ... – Claudiu

1

Hay también esta variante, si su matriz original contiene objetos de valor-clave desde el que sólo desea obtener 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 
+0

Hay una pérdida de memoria en tu código, mutableCopy retiene el objeto que está copiando, por lo tanto, deberías hacer [return autorelease] al final. Además, no hay ninguna razón para hacer mutablecopy en lugar de simplemente hacer una cadena de mútales directamente desde el principio. – thewormsterror

+0

@thewormsterror: olvidé mencionar que este código era para ARC. Además, la llamada de mutablecopy es la convención moderna de 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 sabio. –

Cuestiones relacionadas