在Objective-C中合并NSArrays

Coo*_*coa 28 cocoa objective-c 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
Run Code Online (Sandbox Code Playgroud)

Ben*_*ieb 61

只是用 [newArray addObjectsFromArray:anArray];

  • 这仍然应该为您提供一个平面阵列。您没有添加数组,而是从数组添加了对象。 (2认同)

Kai*_*ain 19

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

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

NSArray *anArray = [someDictionary allValues];
NSArray *flattenedArray = [anArray valueForKeyPath: @"@unionOfArrays.self"];
Run Code Online (Sandbox Code Playgroud)

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

  • 今天,这是比上述所有方案更好的解决方案. (6认同)