Macro flatk::zip [−][src]
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)])