【问题标题】:Merging NSArrays in Objective-C在 Objective-C 中合并 NSArray
【发布时间】:2010-11-19 18:11:36
【问题描述】:

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

【问题讨论】:

标签: objective-c cocoa foundation


【解决方案1】:

【讨论】:

  • 我很高兴有人指出了类类型。我坐在那里想知道为什么该方法没有自动完成。
【解决方案2】:

只需使用[newArray addObjectsFromArray:anArray];

【讨论】:

  • 嗨,Ben,如果我这样做,我就没有平面阵列。我有一个数组数组。我在看是否可以在没有循环的情况下做到这一点。
  • 这仍然应该给你一个平面数组;您不是在添加数组,而是从数组中添加对象。
  • Coocoo4Cocoa:我想你把addObject**FromArray:** 和addObject: 混淆了。 addObject:数组 添加到新数组中,而 Chuck 和 Ben Gottlieb 建议将数组中的元素添加到新数组中。
【解决方案3】:

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

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

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

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

【讨论】:

  • 今天,这是比上述所有方法都更好的解决方案。
猜你喜欢
  • 2019-06-29
  • 2023-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-25
  • 1970-01-01
  • 2010-10-09
  • 1970-01-01
相关资源
最近更新 更多