macro_rules! zip {
(@flatten |$in:pat| $out:expr ) => { ... };
(@flatten |$in:pat| ($($out:tt)*), $_:expr $(,$rest:expr)*) => { ... };
($iter:expr $(, $rest:expr)* $(,)*) => { ... };
}Expand description
Zip multiple iterators.
This is not unlike the izip! macro from itertools, but this has a simpler implementation,
and does not call into_iter on its arguments.
§Examples
Zipping multiple iterators can significantly reduce the boulerplate “.zip” calls and extra parentheses.
use flatk::zip;
let av = vec![1,2,3,4];
let bv = vec![5,6,7,8];
let cv = vec![9,10,11,12];
for (a, b, c) in zip!(av.into_iter(), bv.into_iter(), cv.into_iter()) {
println!("({}, {}, {})", a, b, c);
}This macro can be used in other contexts where iterators are useful. The trailing comma is optional for convenience.
use flatk::zip;
let a_vec = vec![1,2,3,4];
let b_vec = vec![5,6,7,8];
let c_vec = vec![9,10,11,12];
let zipped: Vec<(usize, usize, usize)> = zip!(
a_vec.into_iter(),
b_vec.into_iter(),
c_vec.into_iter(), // with trailing comma
).collect();
assert_eq!(zipped, vec![(1,5,9), (2,6,10), (3,7,11), (4,8,12)])