1 个不稳定版本
0.1.3 | 2021 年 11 月 20 日 |
---|---|
0.1.2 |
|
0.1.1 |
|
0.1.0 |
|
#2684 in Rust 模式
14KB
257 行
Chain-LINQ
该包实现了 .NET 的 LINQ 查询语法,在 Rust 中使用声明性宏。声明性宏由另一个声明性宏生成,即我的另一个包 big_mac 中的 branching_parser。
可用的语句与标准 LINQ 操作紧密对应;特别是缺少 join,因为我无法找到来自迭代器的等效功能。
通常,每个语句都映射到一个迭代器方法;以下是一个列表,包括描述和如果有则等效方法
- from # in #: 从集合中选择并命名变量。映射到 into_iter()。
- select #: 结束 LINQ 查询并返回一个迭代器。映射到 map()。
- select # into #: 部分结束 LINQ 查询并将迭代器放入范围变量中。创建一个后续操作。
- where #: 仅选择符合特定标准的元素。映射到 filter()。
- let # = #: 创建一个范围元素。不映射到方法。
- collect #: 调用 .collect()。
- collect # as #: 调用 .collect 并带有泛型类型。遵循 select 语法,但 as 参数是目标类型。
需要 ITERTOOLS
- orderby #: 按标准排序迭代器。映射到 unstable_sort_by_key()。
- 按 # 升序排序:按标准对迭代器进行排序。映射到 unstable_sort_by_key()。
- 按 # 降序排序:按标准对迭代器进行降序排序。映射到 unstable_sort_by_key().rev()。
- 按 # 分组:根据某些标准将元素分组到组中并返回结果。映射到 group_by()。
- 按 # 分组到 #:根据某些标准将元素分组到组中,然后创建一个继续操作。映射到 group_by()。
有关 LINQ 工作的更多解释,请参阅 Microsoft 的文档 此处
还有用处的: 关键字分解
示例
use chain_linq::linq;
let xs = [(3, 1), (2, 2), (1, 3)];
let x = linq!(
from (x, y) in xs
let z = x + y
select z into zs
from z in zs
select z * 2
);
use chain_linq::linq;
let xss = [vec!(27, 13, 12), vec!(69), vec!(76, 7, 420)];
let x = linq!(
from xs in xss
group xs by xs.len() into gs
from iter in gs
from x in iter
collect x + 1 as Vec<i32>
);
use chain_linq::linq;
let xss = [vec!(27, 13, 12), vec!(69), vec!(76, 7, 420)];
let x = linq!(
from xs in xss
from x in xs.into_iter().rev()
collect x as Vec<i32>
);
依赖项
~445KB