NSStringsのNSArrayを指定すると、(Separatorを使用して)単一のNSStringに結合する簡単な方法がありますか?NSArray要素をNSStringに結合する方法は?
答えて
NSArray * stuff = /* ... */;
NSString * combinedStuff = [stuff componentsJoinedByString:@"separator"];
これは-[NSString componentsSeparatedByString:]
の逆です。
ああ、冗長のために... – Claudiu
-componentsJoinedByString:
のNSArrayはこのトリックを行う必要があります。
あなたの元の配列は、あなただけ(つまり、文字列としてシリアライズすることができます)プロパティを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
あなたのコードにはメモリリークがあり、mutableCopyはコピーしているオブジェクトを保持しているので、最後に[res autorelease]を返す必要があります。バットを真っ直ぐに突き刺すだけでなく、mutablecopyを行う理由もありません。 – thewormsterror
@thewormsterror:このコードはARC用であることを忘れていました。また、mutablecopy呼び出しは、@ - 構文を使ってオブジェクトの可変バージョンを作成するための最新のobjective-c規約です(変更可能なnsarrayの[@ [] mutablecopyなど)。どのような違いがパフォーマンスを賢明にするのか分かりません。 –
私は盲目でなければなりません!または疲れている。または両方... – hop
これについてNSStringドキュメントを検索すると、それは決して見つかりません。そのNSArrayの! – bolnad