2009-09-07 4 views
119

NSStringsのNSArrayを指定すると、(Separatorを使用して)単一のNSStringに結合する簡単な方法がありますか?NSArray要素をNSStringに結合する方法は?

+0

私は盲目でなければなりません!または疲れている。または両方... – hop

+2

これについてNSStringドキュメントを検索すると、それは決して見つかりません。そのNSArrayの! – bolnad

答えて

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

これは-[NSString componentsSeparatedByString:]の逆です。

+1

ああ、冗長のために... – Claudiu

1

あなたの元の配列は、あなただけ(つまり、文字列としてシリアライズすることができます)プロパティを1つ選択したいから、キーと値のオブジェクトが含まれている場合、このバリアントは、もあります:

@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

あなたのコードにはメモリリークがあり、mutableCopyはコピーしているオブジェクトを保持しているので、最後に[res autorelease]を返す必要があります。バットを真っ直ぐに突き刺すだけでなく、mutablecopyを行う理由もありません。 – thewormsterror

+0

@thewormsterror:このコードはARC用であることを忘れていました。また、mutablecopy呼び出しは、@ - 構文を使ってオブジェクトの可変バージョンを作成するための最新のobjective-c規約です(変更可能なnsarrayの[@ [] mutablecopyなど)。どのような違いがパフォーマンスを賢明にするのか分かりません。 –