【问题标题】:Combine large number of NSArrays into single NSArray in Objective-C or Swift在 Objective-C 或 Swift 中将大量 NSArray 组合成单个 NSArray
【发布时间】:2019-06-29 22:19:34
【问题描述】:

我可以将两个 NSArray 与以下代码结合起来:

NSArray *combinedArray =firstArray?[firstArray arrayByAddingObjectsFromArray:secondArray]:[[NSArray alloc] initWithArray:secondArray];

如果你有十个或更多的大量数组,有没有比一个一个组合更简单的方法?

【问题讨论】:

  • 请确定您使用的是什么语言。 — 你的 Objective-C 代码没有意义。您对alloc-initWithArray 的使用是愚蠢的。如果要将数组附加到单个数组,则应该使用 NSMutableArray。 — 如果你使用 Swift,你不应该有 any NSArrays。你应该有相同类型的 Swift 数组,然后这很简单。
  • 请求澄清不是骚扰,也不是指出在 Swift 中添加多个数组是微不足道的。此外,你不能在 Objective-C 中组合多个 NSArray 的方式和在 Swift 中组合多个 Swift 数组的方式之间“转换”。
  • 没有什么是“精心策划的”。几个人独立投票。这就是 Stack Overflow 的工作原理。

标签: ios objective-c swift nsarray


【解决方案1】:

LinqToObjectiveC 可能是你的帮助。

该项目包含 NSArray 和 NSDictionary 方法的集合,这些方法允许您使用受 Linq 启发的流畅语法执行查询。

我认为您可以像下面这样简单地合并十个或更多数组。

id mergedArray = [tenOrMoreArrays linq_aggregate:^id(id item, id aggregate) {
    return [aggregate arrayByAddingObjectsFromArray:item];
}];

*我从未尝试过这个项目,但我认为值得一试。

【讨论】:

    【解决方案2】:

    如果我们谈论的是 Swift,而您所需要的只是一条捷径,那么您可以这样做:

    let a = [0, 1]
    let b = [2, 3]
    let c = [4, 5]
    
    let d = [a, b, c].flatMap { $0 }
    

    【讨论】:

    • 进一步扩展,您甚至可以使用.lazy.flatMap { $0 } 将组合元素视为一个序列,而无需实际分配空间并复制所有元素。
    • 爱平面图。谢谢!
    猜你喜欢
    • 2010-09-11
    • 2010-11-19
    • 1970-01-01
    • 1970-01-01
    • 2018-04-09
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多