2009-09-07 7 views
119

Gibt es angesichts eines NSArray von NSStrings eine schnelle Möglichkeit, sie zu einem einzigen NSString (mit einem Separator) zusammenzufügen?Wie verbinde ich NSArray-Elemente in einen NSString?

+0

Ich muss blind sein! oder müde. oder beides ... – hop

+2

Wenn Sie die NSString-Dokumente nach diesem suchen, werden Sie es nie finden. Es ist in NSArray! – bolnad

Antwort

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

Dies ist die Umkehrung von -[NSString componentsSeparatedByString:].

+1

oh für die Liebe der Ausführlichkeit ... – Claudiu

1

Es gibt auch diese Variante, wenn Ihre ursprüngliche Array enthält Key-Value-Objekte, von denen Sie nur eine Eigenschaft auswählen möchten (das kann als String serialisiert werden):

@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

Es gibt ein Speicherleck in Ihrem Code, mutableCopy behält das Objekt, das es kopiert, daher müssten Sie am Ende [res Autorelease] zurückgeben. Es gibt auch keinen Grund, Mutablecopy zu machen, anstatt einfach eine Mutablestring zu machen. – thewormsterror

+0

@thewormsterror: vergessen zu erwähnen, dass dieser Code für ARC war. Außerdem ist der Mutablecopy-Aufruf die moderne Ziel-c-Konvention zum Erzeugen einer veränderbaren Version von Objekten unter Verwendung von @ -Syntax (wie [@ [] mutablecopy für ein veränderbares nsarray). Ich weiß nicht, was für einen Unterschied es macht. –

Verwandte Themen