Swift 如何映射Zip2的值?
我有两个数组,比如Swift 如何映射Zip2的值?,swift,Swift,我有两个数组,比如[1,2,3]和[“a”,“b”,“c”],我想使用Zip2映射压缩的值(1,“a”),(2,“b”),和(3,“c”) 如果我这样做: let foo = map(Zip2([1, 2, 3], ["a", "b", "c"]).generate()) { $0.0 } foo的类型为ZipGenerator2? 有没有办法把它做成一个数组?假设vals是Zip2的结果,我假设它是一个两元组的数组。像这样: let vals = [(1, "a"), (2, "b"), (
[1,2,3]
和[“a”,“b”,“c”]
,我想使用Zip2映射压缩的值(1,“a”)
,(2,“b”)
,和(3,“c”)
如果我这样做:
let foo = map(Zip2([1, 2, 3], ["a", "b", "c"]).generate()) { $0.0 }
foo的类型为ZipGenerator2?
有没有办法把它做成一个数组?假设
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"
}
以下内容将从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]
Zip2是一个结构,而不是元组数组:\当我使用像
map(0..5){$0}
这样的范围的map时,我通过像array(map(0..5){$0})那样包装它来获得一个数组。我正在为Zip2生成器寻找类似的转换(我认为)。然后不要使用Zip2.:-)这显然是Objective-C时代的遗留问题,在Objective-C时代,元组并不作为一类对象存在。我看到它已经被回答了,但是如果你只是在一个数组结果之后,为什么不这样做:让foo=map(Zip2([1,2,3],“a”,“b”,“c”){$0.0}
那么foo
是一个数组。看起来很合理。要么是我没有尝试过,要么是Swift库在我提出这个问题后有所改进。