我剛剛發現了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中定義可變大小的元組的方式。 –