10 个版本 (1 个稳定版本)
| 1.0.0 | 2024年1月17日 | 
|---|---|
| 0.5.2 | 2024年1月11日 | 
| 0.5.0 | 2022年5月29日 | 
| 0.4.2 | 2021年5月4日 | 
| 0.1.0 | 2019年3月30日 | 
#296 in Rust 模式
19KB
224 行
iter-comprehensions
简介
iter-comprehensions 提供了一些宏,用于实现 Rust 中的迭代器和向量推导。
- comprehension!用于生成索引元组的序列
- map!用于生成表达式序列
- vec!用于构造向量
- sum!用于计算一些值的和
- product!用于计算一些值的积
宏 comprehension! 可以用来生成使用生成序列和条件过滤器元素的序列。
comprehension!(i1 in RANGE1, COND1, ..., ik in RANGEk)
其中 RANGE* 是迭代器(实际上是实现了 IntoIterator)的所有内容)和每个 COND* 是一个布尔条件。每个 RANGE 和 COND 项都可以使用先前范围表达式声明的变量。
宏 map! 增加了一个额外的表达式,该表达式根据索引计算值
map!(i1 in RANGE1, COND1, ..., ik in RANGEk, EXPR)
map!(EXPR; i1 in RANGE1, COND1, ..., ik in RANGEk)
示例
表达式 {5i + j: i ∈ {0,…,4}, j ∈ {0,…,4}, i < j } 等价于以下形式
use iter_comprehensions::map;
assert_eq!(map!(5*i + j; i in 0..5, j in 0..5, i < j).collect::<Vec<_>>(),
           vec![1, 2, 3, 4, 7, 8, 9, 13, 14, 19]);
可以使用类似的语法创建向量
use iter_comprehensions::vec;
assert_eq!(vec![i; i in 0..5], vec![0,1,2,3,4]);
assert_eq!(vec![(i,j); i in 0..3, j in 0..3, i < j],
           vec![(0,1), (0,2), (1,2)]);
计算值的和
use iter_comprehensions::{sum, vec};
assert_eq!(sum!(i; i in 1..10, i % 2 == 1), 25);
let S = vec![i; i in 1..10];
assert_eq!(sum!(i in S, i % 2 == 1, i), 25);
计算值的积
use iter_comprehensions::product;
assert_eq!(product!(i; i in 1..=5), 120);
assert_eq!(product!(i in 1..=5, i), 120);
作者
Frank Fischer frank-fischer@shadow-soft.de
安装
将需求 iter-comprehensions = "^1.0.0"
文档
见 docs.rs.
示例
下载
最新标记版本的源代码: iter-comprehensions-v1.0.0.tar.gz
主分支的源代码: iter-comprehensions-trunk.tar.gz