3个不稳定版本
0.2.1 | 2021年3月30日 |
---|---|
0.2.0 | 2021年3月30日 |
0.1.0 | 2021年3月30日 |
#2968 in Rust patterns
每月542次下载
在2个crate中使用了(通过rs2glsl-macros)
6KB
71 行
cartesian-rs
一个宏,用于将迭代器组合到笛卡尔积中。使用该宏可以编写更紧凑的代码,并减少缩进空间。
编写一个循环并迭代多个迭代器的笛卡尔积类似于嵌套循环,每个循环迭代一个迭代器。然而,break的语义已更改。
示例
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);
许可协议
本软件包根据MIT许可协议授权。
lib.rs
:
提供了一个简化某些循环的质量宏cartesian!
。
该宏接受最多26个迭代器作为参数,并创建所有输入迭代器的笛卡尔积迭代器,类似于嵌套的for循环。
其行为与嵌套的for循环相同,具有更紧凑和简化break和continue的优势。
示例
use cartesian::*;
let mut volume_grid = vec![vec![vec![0; 10]; 10]; 10];
for (x, y, z) in cartesian!(0..10, 0..10, 0..10) {
volume_grid[x][y][z] = x * y + z;
}
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);