web-dev-qa-db-ja.com

Objective-CでのNSArrayのマージ

各キーが配列を指すNSDictionaryがあります。後で、すべての値を1つの配列にマージしたいと思います。 APIを使用して、言うよりも効率的なことを行う方法はありますか?

NSArray *anArray = [someDictionary allValues];
NSMutableArray *newArray = [NSMutableArray array];
start outter loop on anArray
   start inner loop on objects in anArray
     add objectAtIndex to newArray
27
Coocoo4Cocoa

[newArray addObjectsFromArray:anArray];を使用するだけです

60
Ben Gottlieb
21
Chuck

上記のベン・ゴットリーブの答えにはいくつかの混乱があります。明確にするために、彼は内側のループの代わりにaddObjectsFromArrayを使用することを提案していますが、Coocooは、すべてのループの代わりとして提案されていると考えているため、混乱しています。 (これを行うと、彼の異議に従って、フラット化されていない配列の配列が実際に残されます。)

これは、明示的なループを必要としない、適度に洗練されたソリューションです。

NSArray *anArray = [someDictionary allValues];
NSArray *flattenedArray = [anArray valueForKeyPath: @"@unionOfArrays.self"];

ところで、このコードはフラット化された配列に重複を残します。重複を削除する場合は、nionOfArraysの代わりにdistinctUnionOfArraysを使用してください。

19
Kaitain