1 unstable release
Uses old Rust 2015
0.1.0 | May 25, 2015 |
---|
#524 in Compression
33 downloads per month
17KB
335 lines
multizip
Zip 3, 4, 5 or more Rust iterators
Description
With Rust's stdlib you can only zip 2 iterators at a time:
let a: Vec<i8> = vec![0, 1, 2];
let b: Vec<i8> = vec![3, 4, 5];
let c: Vec<i8> = vec![6, 7, 8];
let d: Vec<i8> = vec![9, 10, 11];
let abc = a.iter().zip(b.iter()).zip(c.iter())
.map(|((&aa, &bb), &cc)| aa+bb+cc);
// (( , ), )
// ^~~~~~~~~~^~~~~~^ awkward!
let abcd = a.iter().zip(b.iter()).zip(c.iter()).zip(d.iter())
.map(|(((&aa, &bb), &cc), &dd)| aa+bb+cc+dd);
// ((( , ), ), )
// ^~~~~~~~~~~^~~~~~^~~~~~^ ughhh!
With multizip
, you get a flattened version of zip
:
let abc = multizip::zip3(a.iter(),
b.iter(),
c.iter())
.map(|(&aa, &bb, &cc)| aa+bb+cc))
// ( , , )
// ^~~~~~~~~~~~~~^ oooh!
let abcd = multizip::zip4(a.iter(),
b.iter(),
c.iter(),
d.iter())
.map(|(&aa, &bb, &cc, &dd)| aa+bb+cc+dd)
// ( , , , )
// ^~~~~~~~~~~~~~~~~~~^ sweet!
How to use
TODO: upload to crates.io and update here with Cargo instructions.
FAQ
How much variables can I zip together?
Rust supports up to 12 variables in a single tuple, so the following are
implemented: zip2()
, zip3()
, zip4()
..., zip12()
.
If you need more than 12, something is probably wrong with your design. Consider something more appropriate than tuples.
What is the advantage of multizip::zip2()
over std::iter::zip()
?
The only advantage is the symmetry of arguments, e.g. zip2(a.iter(), b.iter())
over a.iter().zip(b.iter())
.
Author
Marc Dupont -- mdup.fr