2009-09-07 12 views
119

Dato un NSArray di NSStrings, c'è un modo rapido per unirli in un'unica NSString (con un Separatore)?Come unire elementi NSArray in una NSString?

+0

devo essere cieco! o stanco. o entrambi ... – hop

+2

Se cerchi i documenti NSString per questo, non lo troverai mai. È in NSArray! – bolnad

risposta

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

Questo è l'inverso di -[NSString componentsSeparatedByString:].

+1

oh per l'amore della verbosità ... – Claudiu

1

C'è anche questa variante, se la matrice originale contiene gli oggetti di valori-chiave da cui si desidera solo per raccogliere una proprietà (che può essere serializzato come stringa):

@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

C'è una perdita di memoria nel codice, mutableCopy conserva l'oggetto che sta copiando, quindi dovresti fare ritorno [res autorelease] alla fine. Inoltre non vi è alcun motivo per fare mutablecopy invece di creare un mutablestring immediatamente. – thewormsterror

+0

@thewormsterror: ho dimenticato di menzionare che questo codice era per ARC. Inoltre, la chiamata mutablecopy è la moderna convenzione ogg-c per la creazione di versioni mutabili di oggetti usando @ -syntax (come [@ [] mutablecopy] per un nsarray mutabile). Non so che differenza fa le prestazioni saggio. –

Problemi correlati