Is there a zip function to create tuples with more than 2 elements?
Bear in mind, you can nest one zip
inside another, and then unpack it with a nested tuple:
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)")
}
Not quite as elegant as having a zip
for arbitrary n-tuples, but it gets the job done.
No, zip
for an arbitrary number of sequences isn't currently possible due to Swift's lack of variadic generics. This is discussed in the Generics Manifesto.
In the meanwhile, I wrote a gyb
template for generating ZipSequences of custom arity. I've also pre-generated ZipSequences of arity 3...10
for your convenience. It's available here.
In action:
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)")
}
Prints:
1 a 1.0
2 b 2.0
3 c 3.0
4 d 4.0
5 e 5.0