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)])