30

各キーが配列を指す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
4

3 に答える 3

62

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

于 2009-08-14T19:04:09.793 に答える
21

-[NSMutableArray addObjectsFromArray:]

于 2009-08-14T19:03:11.950 に答える
20

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

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

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

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

于 2014-01-03T20:02:03.523 に答える