Crates.io | cartesian |
lib.rs | cartesian |
version | 0.2.1 |
source | src |
created_at | 2021-03-30 13:44:43.199799 |
updated_at | 2021-03-30 19:52:44.209233 |
description | QOL macro that creates the cartesian product of multiple iterators |
homepage | |
repository | https://github.com/JM4ier/cartesian-rs |
max_upload_size | |
id | 375761 |
size | 6,421 |
A macro for combining iterators to the cartesian product. Using the macro it is possible to write code compacter, and use less indention space.
Writing one for-loop and iterating through the cartesian product of multiple iterators
is similar to nesting for loops, in each loop iterating through one of the iterators.
However, the semantics of break
is changed.
let (m, n, p) = (3, 3, 1);
let mut id = vec![vec![0; n]; m];
for (i, j) in cartesian!(0..m, 0..n) {
id[i][j] = (i == j) as u32;
}
let col_vec = vec![vec![1], vec![2], vec![4]];
let mut res = vec![vec![0; p]; m];
for (i, j, k) in cartesian!(0..m, 0..n, 0..p) {
res[i][k] += id[i][j] * col_vec[j][k];
}
assert_eq!(col_vec, res);
This package is licensed under the MIT license.