在Objective-C中合并NSArrays

时间:2009-08-14 19:00:18

标签: objective-c cocoa foundation

我有一个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

3 个答案:

答案 0 :(得分:60)

只需使用[newArray addObjectsFromArray:anArray];

即可

答案 1 :(得分:21)

答案 2 :(得分:19)

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

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

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

顺便说一下,这段代码会在flattened数组中留下重复数据。如果要删除重复项,请使用 distinctUnionOfArrays 而不是 unionOfArrays