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 模式

MIT 许可证

19KB
224

iter-comprehensions

rs-graph crate iter-comprehensions docs

简介

iter-comprehensions 提供了一些宏,用于实现 Rust 中的迭代器和向量推导。

  1. comprehension! 用于生成索引元组的序列
  2. map! 用于生成表达式序列
  3. vec! 用于构造向量
  4. sum! 用于计算一些值的和
  5. product! 用于计算一些值的积

comprehension! 可以用来生成使用生成序列和条件过滤器元素的序列。

comprehension!(i1 in RANGE1, COND1, ..., ik in RANGEk)

其中 RANGE* 是迭代器(实际上是实现了 IntoIterator)的所有内容)和每个 COND* 是一个布尔条件。每个 RANGECOND 项都可以使用先前范围表达式声明的变量。

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 [email protected]

安装

将需求 iter-comprehensions = "^1.0.0"

文档

docs.rs.

示例

下载

最新标记版本的源代码: iter-comprehensions-v1.0.0.tar.gz

主分支的源代码: iter-comprehensions-trunk.tar.gz

没有运行时依赖