我有两个数组,例如[1, 2, 3]
和["a", "b", "c"]
,我想使用Zip2映射压缩值(1, "a")
,(2, "b")
和(3, "c")
。< / p>
如果我这样做:
let foo = map(Zip2([1, 2, 3], ["a", "b", "c"]).generate()) { $0.0 }
foo的类型为ZipGenerator2<IndexingGenerator<Array<Int>>, IndexingGenerator<Array<String>>>?
。
有没有办法让它成为一个数组?
答案 0 :(得分:6)
以下将从Zip2的返回值中获取一个数组:
var myZip = Zip2([1, 2, 3], ["a", "b", "c"]).generate()
var myZipArray: Array<(Int, String)> = []
while let elem = myZip.next() {
myZipArray += elem
}
println(myZipArray) // [(1, a), (2, b), (3, c)]
- 更新:更好! - 强>
let myZip = Zip2([1, 2, 3], ["a", "b", "c"])
let myZipArray = Array(myZip)
println(myZipArray) // [(1, a), (2, b), (3, c)]
- 现在为了好玩 -
我猜我们可以使用响应generate()
的任何内容初始化一个新数组吗?
println(Array("abcde")) // [a, b, c, d, e]
答案 1 :(得分:0)
假设vals
是Zip2
的结果,我假设它是两个元组的数组。像这样:
let vals = [(1, "a"), (2, "b"), (3, "c")]
使用它,只需在数组上调用map()
方法。
vals.map { $0.0 }
例如:
> vals.map { $0.1 }
$R16: String[] = size=3 {
[0] = "a"
[1] = "b"
[2] = "c"
}