我有两个数组,我需要保持顺序
let a = ["Icon1", "Icon2", "Icon3",]
let b = ["icon1.png", "icon2.png", "icon3.png",]
如果我将两者结合起来,我会得到
let c = a + b
// [Icon1, Icon2, Icon3, icon1.png, icon2.png, icon3.png]
如何得到下面的结果?
[Icon1, icon1.png, Icon2, icon2.png, Icon3, icon3.png]
最佳答案
2015 年 12 月 16 日更新:不知道为什么我没有意识到 flatMap 是一个很好的候选者。也许当时它不在核心库中?无论如何,map/reduce 可以用一次调用 flatMap 来代替。 Zip2 也已重命名。新的解决方案是
let c = Zip2Sequence(a,b).flatMap{[$0, $1]}
如果你在 swift repl 环境中运行它:
> let c = Zip2Sequence(a,b).flatMap{[$0, $1]}
c: [String] = 6 values {
[0] = "Icon1"
[1] = "icon1.png"
[2] = "Icon2"
[3] = "icon2.png"
[4] = "Icon3"
[5] = "icon3.png"
}
原回答如下:
这是我一起玩乐的一种方式
let c = map(Zip2(a,b), { t in
[t.0, t.1]
})
let d = c.reduce([], +)
或内联
let c = map(Zip2(a,b), { t in
[t.0, t.1]
}).reduce([], +)
压缩似乎是不必要的。我想有更好的方法来做到这一点。但基本上,我将它们压缩在一起,然后将每个元组转换为一个数组,然后展平数组的数组。
最后,更短一点:
let c = map(Zip2(a,b)){ [$0.0, $0.1] }.reduce([], +)
关于iphone - 你如何在 Swift 中连接两个数组并保持每个数组的顺序? (快速交错数组),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28356689/