Swift 2 - 合并两个数组
Swift 2 - Merge two arrays
我正在尝试合并两个数组:
数组 1
[["aaa","111"],["bbb","222"],["ccc","333"]]
数组 2
[["ddd","444"],["eee","555"],["fff","666"]]
我想要实现的是拥有一个数组,其值与数组位置相关,例如:
合并数组
[["aaa","111"],["ddd","444"],["bbb","222"],["eee","555"],["ccc","333"],["fff","666"]]
如何使用 Swift 2
let arr1 = [["aaa","111"],["bbb","222"],["ccc","333"]]
let arr2 = [["ddd","444"],["eee","555"],["fff","666"]]
let arr3 = arr1 + arr2
print(arr3) // [["aaa", "111"], ["bbb", "222"], ["ccc", "333"], ["ddd", "444"], ["eee", "555"], ["fff", "666"]]
在你的情况下,有特定的要求
let arr4 = zip(arr1, arr2).reduce([]) { (var arr, p:(Array<String>, Array<String>)) -> [[String]] in
arr.append(p.0)
arr.append(p.1)
return arr
}
print(arr4) // [["aaa", "111"], ["ddd", "444"], ["bbb", "222"], ["eee", "555"], ["ccc", "333"], ["fff", "666"]]
更新
根据您在注释中提到的需求,您可以通过这种方式添加其余值(请先将 let arr4 更改为 var arr4!!!)
var i = arr4.count / 2
while i < arr1.count {
arr4.append(arr1[i++])
}
while i < arr2.count {
arr4.append(arr2[i++])
}
print(arr4)
这给了你
[["aaa", "111"], ["ddd", "444"], ["bbb", "222"], ["eee", "555"], ["ccc", "333"], ["fff", "666"], ["zzz", "755"]]
它应该可以工作,即使其中一个数组是空的
使用zip
函数
Array(zip(arr1, arr2))
@edit
正如@user3441734 提到的 zip
returns 图。要解决这个问题,您可以使用 flatMap
var a = [["aaa","111"],["bbb","222"],["ccc","333"]]
var b = [["ddd","444"],["eee","555"],["fff","666"]]
var cos = Array(zip(a, b))
var eee = cos.flatMap { [[=11=].0, [=11=].1] }
结果:
[["aaa", "111"], ["ddd", "444"], ["bbb", "222"], ["eee", "555"],["ccc", "333"], ["fff", "666"]]
简答:
var result = zip(arr1, arr2).flatMap { [[=13=].0, [=13=].1] }
我正在尝试合并两个数组:
数组 1
[["aaa","111"],["bbb","222"],["ccc","333"]]
数组 2
[["ddd","444"],["eee","555"],["fff","666"]]
我想要实现的是拥有一个数组,其值与数组位置相关,例如:
合并数组
[["aaa","111"],["ddd","444"],["bbb","222"],["eee","555"],["ccc","333"],["fff","666"]]
如何使用 Swift 2
let arr1 = [["aaa","111"],["bbb","222"],["ccc","333"]]
let arr2 = [["ddd","444"],["eee","555"],["fff","666"]]
let arr3 = arr1 + arr2
print(arr3) // [["aaa", "111"], ["bbb", "222"], ["ccc", "333"], ["ddd", "444"], ["eee", "555"], ["fff", "666"]]
在你的情况下,有特定的要求
let arr4 = zip(arr1, arr2).reduce([]) { (var arr, p:(Array<String>, Array<String>)) -> [[String]] in
arr.append(p.0)
arr.append(p.1)
return arr
}
print(arr4) // [["aaa", "111"], ["ddd", "444"], ["bbb", "222"], ["eee", "555"], ["ccc", "333"], ["fff", "666"]]
更新 根据您在注释中提到的需求,您可以通过这种方式添加其余值(请先将 let arr4 更改为 var arr4!!!)
var i = arr4.count / 2
while i < arr1.count {
arr4.append(arr1[i++])
}
while i < arr2.count {
arr4.append(arr2[i++])
}
print(arr4)
这给了你
[["aaa", "111"], ["ddd", "444"], ["bbb", "222"], ["eee", "555"], ["ccc", "333"], ["fff", "666"], ["zzz", "755"]]
它应该可以工作,即使其中一个数组是空的
使用zip
函数
Array(zip(arr1, arr2))
@edit
正如@user3441734 提到的 zip
returns 图。要解决这个问题,您可以使用 flatMap
var a = [["aaa","111"],["bbb","222"],["ccc","333"]]
var b = [["ddd","444"],["eee","555"],["fff","666"]]
var cos = Array(zip(a, b))
var eee = cos.flatMap { [[=11=].0, [=11=].1] }
结果:
[["aaa", "111"], ["ddd", "444"], ["bbb", "222"], ["eee", "555"],["ccc", "333"], ["fff", "666"]]
简答:
var result = zip(arr1, arr2).flatMap { [[=13=].0, [=13=].1] }