30

我有一个 NSDictionary,其中每个键都指向一个数组。我稍后想将所有值合并到一个数组中。有没有办法使用 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

上面 Benn Gottlieb 的回答有些混乱。为了澄清,他建议使用addObjectsFromArray代替内部循环,而 Coocoo 感到困惑,因为他认为它被建议作为所有循环的替代品。(如果你这样做,根据他的反对,你确实会留下一个未展平的数组数组。)

这是一个相当优雅的解决方案,不需要任何显式循环:

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

顺便说一句,此代码将在展平数组中留下重复项。如果要删除重复项,请使用distinctUnionOfArrays而不是unionOfArrays

于 2014-01-03T20:02:03.523 回答