你如何映射Zip2的值?

时间:2014-06-23 03:38:01

标签: swift

我有两个数组,例如[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>>>?

有没有办法让它成为一个数组?

2 个答案:

答案 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)

假设valsZip2的结果,我假设它是两个元组的数组。像这样:

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