加入多维数组

时间:2016-05-25 00:03:02

标签: arrays swift

我有多个不同大小的数组,例如:

let array1 = [[1, 2, 3], [1, 2, 3]]
let array2 = [[1, 2], [1, 2]]
let array3 = [[1, 2], [1, 2], [1, 2]]

我想和他们在一起,所以我得到了最后一个阵列:

let finalArray = [[1, 2, 3, 1, 2, 1, 2], [1, 2, 3, 1, 2, 1, 2], [1, 2]]

关于如何以有效的方式实现这一目标的任何想法?

3 个答案:

答案 0 :(得分:2)

试试这样:

var finalArray:[[Int]] = []
for index in 0..<max(array1.count,array2.count,array3.count) {
    finalArray.append([])
    if index < array1.count {
        finalArray[index].appendContentsOf(array1[index])
    }
    if index < array2.count {
        finalArray[index].appendContentsOf(array2[index])
    }
    if index < array3.count{
        finalArray[index].appendContentsOf(array3[index])
    }
}
finalArray // [[1, 2, 3, 1, 2, 1, 2], [1, 2, 3, 1, 2, 1, 2], [1, 2]]

答案 1 :(得分:1)

怎么样:

var arrays = [array1, array2, array3];
var maxSize = Math.max.apply(null, arrays.map(function(a){ return a.length }))
var result = [];

for (var i = 0; i < arrays.length; i++) {
  result[i] = [];
  for (var j = 0; j < maxSize; j++) {
    if (arrays[j][i]) {
      result[i] = result[i].concat(arrays[j][i]);
    }
  }
}

这假设您要做的是最终得到的结果数组与最大输入数组具有相同数量的元素,将输入数组中相同位置的元素放在同一输出数组中订购原始数组。

答案 2 :(得分:1)

zip是组合数组所需的明显功能,但它无法处理不均匀的长度,map调用在这种情况下可能不如C类算法有效。然而,作为练习,这里有一个更实用的方法 IF 可以预处理数组以包含缺失数据的空数组

let z12  = zip(array1, array2)
let z123 = zip(z12, array3)
let answer = z123.map { [$0.0.0, $0.0.1, $0.1].flatMap { $0 } }

我已将数组从let更改为var,以便可以追加它们,并且我已更改索引1的数据,以使答案更明显正确。

enter image description here