arrays - 将多个数组合并为一个,顺序索引

标签 arrays swift functional-programming

我有多个数组(最多 15 个),每个最多可以有 1800 个对象。

我需要将它们组合成一个数组,这样我就可以应用分隔符 (',') 来生成一个 csv 文件。问题是当我将它们组合成一个数组时,它必须按顺序组合,就像每个数组的第一个对象应该首先插入,然后是对象的第二个索引,然后是第三个,依此类推。

我能够通过使用 for-in 循环获得我想要的结果。然而,这不是很 swift 。我觉得可以使用 swift 中可用的函数式方法(使用 map、reduce 和 filter 函数)以更简洁的方式完成。

但是我无法将它们完美地结合起来。任何人都可以帮助我使用快速功能方法来实现结果。

P.S:如果您想让我发布 for-in 循环代码,请告诉我,但我认为这不是必需的。

最佳答案

给定 4 个(或更多)数组

let list0: [Int] = [ 1, 2, 3, 6, 7, 8, 9 ]
let list1: [Int] = [ 10, 20, 30, 40, 50, 60, 70, 80, 90]
let list2: [Int] = [ 100, 200, 300, 400, 500, 600, 700, 800, 900]
let list3: [Int] = [ 1000, 2000, 3000, 4000, 5000, 6000, 7000, 8000, 9000 ]

枚举每一个,放入另一个数组中

let lists = [
    list0.enumerate().map { (index: $0, array: 0, value: $1) },
    list1.enumerate().map { (index: $0, array: 1, value: $1) },
    list2.enumerate().map { (index: $0, array: 2, value: $1) },
    list3.enumerate().map { (index: $0, array: 3, value: $1) }
]

现在你可以写了

let sorted = lists
    .flatten()
    .sort { ($0.index, $0.array) < ($1.index, $1.array) }
    .map { $0.value }

[1, 10, 100, 1000, 2, 20, 200, 2000, 3, 30, 300, 3000, 6, 40, 400, 4000, 7, 50, 500, 5000, 8, 60, 600, 6000, 9, 70, 700, 7000, 80, 800, 8000, 90, 900, 9000]

关于arrays - 将多个数组合并为一个,顺序索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39696381/

相关文章:

非均匀多维数组上的 C++ 迭代

c++ - 重新分配大小未知的 const char 数组

swift - ARC(自动引用计数)实战

ios - UITableViewCell 内的 UITextField

scala - 如何显式返回 Unit?

Javascript - 使用变量获取数组的一部分

java - 如何读取文本文件中行列表的位置

generics - 通用 NSOperation 子类失去了 NSOperation 功能

javascript - 如何将 shouldComponentUpdate 与 React Hooks 一起使用?

Ruby - 使用索引进行过滤的函数式方法