itertools

Macro iproduct

Source
macro_rules! iproduct {
    (@flatten $I:expr,) => { ... };
    (@flatten $I:expr, $J:expr, $($K:expr,)*) => { ... };
    () => { ... };
    ($I:expr $(,)?) => { ... };
    ($I:expr, $J:expr $(,)?) => { ... };
    ($I:expr, $J:expr, $($K:expr),+ $(,)?) => { ... };
}
Expand description

Create an iterator over the “cartesian product” of iterators.

Iterator element type is like (A, B, ..., E) if formed from iterators (I, J, ..., M) with element types I::Item = A, J::Item = B, etc.

// Iterate over the coordinates of a 4 x 4 x 4 grid
// from (0, 0, 0), (0, 0, 1), .., (0, 1, 0), (0, 1, 1), .. etc until (3, 3, 3)
for (i, j, k) in iproduct!(0..4, 0..4, 0..4) {
   // ..
}