我怎样才能最容易地在Cocoa中展平三维数组?

Mon*_*olo 13 cocoa objective-c

假设我有一个这样的数组:

NSArray *threeDimensionalArray = @[
 @[     
     @[ @"Peter", @"Paul", @"Mary" ], @[ @"Joe", @"Jane" ]
  ],
 @[
     @[ @"Alice", @"Bob" ]
  ]
];
Run Code Online (Sandbox Code Playgroud)

我希望它成为:

@[ @"Peter", @"Paul", @"Mary", @"Joe", @"Jane", @"Alice", @"Bob" ]
Run Code Online (Sandbox Code Playgroud)

我怎样才能最轻松地创建这个扁平阵列?

Mon*_*olo 27

键值编码(KVC)集合运算符展@unionOfArrays平了一个级别的数组,因此应用它两次会产生所需的结果.

集合运算符(除了@count)需要一个到集合属性的键路径,因为我们的对象本身已经是数组(因此也是集合),所以键路径必须是self.

因此,我们需要对键路径应用@unionOfArrays两次self,产生以下KVC调用以展平3D数组:

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