我刚刚发现了Swift zip
函数。这似乎很有用。是否有一个zip函数来创建超过2个元素的元组?
它需要2个输入数组,并从每个数组的值对中创建一个元组数组。
是否有一个zip的变体,它接受任意数量的数组并输出具有相同数量元素的元组?似乎应该有办法做到这一点。
我刚刚发现了Swift zip
函数。这似乎很有用。是否有一个zip函数来创建超过2个元素的元组?
它需要2个输入数组,并从每个数组的值对中创建一个元组数组。
是否有一个zip的变体,它接受任意数量的数组并输出具有相同数量元素的元组?似乎应该有办法做到这一点。
对于任意数量的序列而言,否,zip
由于Swift缺乏可变参数类型而当前不可行。这在the Generics Manifesto中讨论。
与此同时,我写了一个gyb
模板来生成自定义元组的ZipSequences。为了您的方便,我还预先生成了序列号为3...10
的ZipSequences。 It's available here.
在动作:
let integers = [1, 2, 3, 4, 5]
let strings = ["a", "b", "c", "d", "e"]
let doubles = [1.0, 2.0, 3.0, 4.0, 5.0]
for (integer, string, double) in zip(integers, strings, doubles) {
print("\(integer) \(string) \(double)")
}
打印:
1 1.0
2 B 2.0
3c的3.0
4 d 4.0
5e的5.0
。记住,你可以嵌套一个zip
内的另一个,然后用一个嵌套的元组解包:
let integers = [1, 2, 3, 4, 5]
let strings = ["a", "b", "c", "d", "e"]
let doubles = [1.0, 2.0, 3.0, 4.0, 5.0]
for (integer, (string, double)) in zip(integers, zip(strings, doubles)) {
print("\(integer) \(string) \(double)")
}
不太一样优雅具有任意一个zip
n元组,但它完成了工作。
你是一个天才。 –
我不是Swift的专家,但是虽然您可以创建一个接受可变数量的序列参数的函数,但是如何将返回类型声明为未知大小的元组? – rmaddy
好点。您可以使用泛型来定义创建元组的元素,这些元素是输入数组元素的类型,但我不知道Swift中定义可变大小的元组的方式。 –