Swift 2 - 合并两个数组

3

我正在尝试合并两个数组:

数组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中,我该如何实现这一点?

2个回答

7
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"]]

即使其中一个数组为空,它也应该能够正常工作。


谢谢,但我需要获取一个类似于:'[["aaa","111"],["ddd","444"],["bbb","222"],["eee","555"],["ccc","333"],["fff","666"]]' 的数组 - 不是顺序的。 - SNos
在 Swift 的下一个版本中,您可以期望看到 { res, p([String],[String]) in var arr = res ... },我们预计参数将是必需的 let。 - user3441734
1
然而,这仅在两个数组具有相同数量的值时才有效。如果一个数组有更多的值呢?let arr1 = [["aaa","111"],["bbb","222"],["ccc","333"],["zzz","755"]] - let arr2 = [["ddd","444"],["eee","555"],["fff","666"]] - SNos
打印(arr4)的结果应该包含所有额外的值: [["aaa", "111"], ["ddd", "444"], ["bbb", "222"], ["eee", "555"], ["ccc", "333"], ["fff", "666"],["zzz","755"],...] - SNos
看起来你需要完成一项作业。你确定stackoverflow是一个适合指定任务并由他人为你完成的地方吗?如果你真的遇到了问题,可以向社区展示你的代码并询问大家哪里出错了...或者雇佣某个人。 - user3441734
显示剩余5条评论

3

使用zip函数

Array(zip(arr1, arr2))

@edit

如@user3441734所提到的,zip函数返回元组。为了解决这个问题,您可以使用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 { [$0.0, $0.1] }

结果:

[["aaa", "111"], ["ddd", "444"], ["bbb", "222"], ["eee", "555"],["ccc", "333"], ["fff", "666"]]

简短回答:

var result = zip(arr1, arr2).flatMap { [$0.0, $0.1] }

不错的一行代码,但要检查结果.. .[(["aaa", "111"], ["ddd", "444"]), (["bbb", "222"], ["eee", "555"]), (["ccc", "333"], ["fff", "666"])] - user3441734
他需要一个数组...请看我的回答。 - user3441734
完美而优雅的答案。对我来说,这应该是被接受的答案。 - Martin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接