8个不稳定版本 (3个破坏性更新)
0.4.0 | 2024年7月31日 |
---|---|
0.3.3 | 2024年7月23日 |
0.2.0 | 2024年7月22日 |
0.1.1 | 2024年7月20日 |
#273 in 数据结构
每月下载量768次
700KB
5K SLoC
Rust标准库集合的实用扩展方法。
允许直接以函数式风格操作集合,而不使用通常的迭代器样板代码。
概述
- 将标准迭代器方法添加到标准库集合中
- 还包括在集合库中常见的一些附加实用方法
- 所有方法都将集合实例视为不可变,尽管其中一些会消费它们
- 修改集合的方法返回一个新的集合,而不是迭代器
- 性能接近最优,开销仅限于新集合的创建
功能
示例
use cantrip::*;
let a = vec![1, 2, 3];
a.fold(0, |r, x| r + x); // 6
a.map_ref(|&x| (x, x)).to_map(); // HashMap::from([(1, 1), (2, 2), (3, 3)])
a.flat_map(|x| [x, -x]).sorted(); // vec![-3, -2, -1, 1, 2, 3]
a.filter(|&x| x > 1).to_set(); // HashSet::from([2, 3])
a.group_by(|x| x % 2); // HashMap::from([(0, vec![2]), (1, vec![1, 3])])
a.delete(&1).add(2).unique(); // vec![2, 3]
a.substitute_at(0, 4).to_list(); // LinkedList::from([4, 2, 3])
a.position_multi(|&x| x % 2 == 1); // vec![0, 2]
a.rev().into_iter().to_deque(); // VecDeque::from([3, 2, 1])
方法
搜索
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
find | * | * | * | * | N |
find_map | * | * | * | Y | |
find_map_ref | * | * | * | * | N |
find_position | * | * | N | ||
first | * | * | N | ||
last | * | N | |||
max_by | * | * | * | * | N |
max_by_key | * | * | * | * | N |
max_of | * | * | * | * | N |
min_by | * | * | * | * | N |
min_by_key | * | * | * | * | N |
min_of | * | * | * | * | N |
minmax_by | * | * | * | * | N |
minmax_by_key | * | * | * | * | N |
minmax_of | * | * | * | * | N |
position | * | * | N | ||
position_multi | * | * | N | ||
position_of | * | * | N | ||
position_of_multi | * | * | N | ||
position_sequence | * | * | N | ||
rfind | * | * | N | ||
rposition | * | * | N |
修改
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
add | * | * | * | Y | |
add_at | * | Y | |||
add_at_multi | * | Y | |||
add_multi | * | * | * | Y | |
delete | * | * | * | Y | |
delete_at | * | Y | |||
delete_at_multi | * | Y | |||
delete_multi | * | * | * | Y | |
move_at | * | Y | |||
pad_left | * | Y | |||
pad_left_with | * | Y | |||
pad_right | * | Y | |||
pad_right_with | * | Y | |||
rev | * | Y | |||
substitute | * | * | * | Y | |
substitute_at | * | Y | |||
substitute_at_multi | * | Y | |||
substitute_multi | * | * | * | Y | |
swap_at | * | Y |
过滤
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
duplicates | * | Y | |||
duplicates_by | * | Y | |||
filter | * | * | * | Y | |
filter_keys | * | Y | |||
filter_map | * | * | * | Y | |
filter_map_ref | * | * | * | N | |
filter_ref | * | * | * | N | |
filter_values | * | Y | |||
init | * | Y | |||
init_ref | * | Y | |||
intersect | * | * | * | Y | |
largest | * | * | Y | ||
slice | * | Y | |||
smallest | * | * | Y | ||
skip | * | Y | |||
skip_while | * | Y | |||
skip_ref | * | Y | |||
skip_while_ref | * | Y | |||
step_by | * | Y | |||
take | * | Y | |||
take_while | * | Y | |||
take_ref | * | Y | |||
take_while_ref | * | Y | |||
独特 | * | Y | |||
按独特性排序 | * | Y | |||
尾部 | * | Y | |||
尾部引用 | * | N |
映射
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
合并 | * | Y | |||
枚举 | * | Y | |||
扁平映射 | * | * | * | Y | |
扁平映射引用 | * | * | * | N | |
映射 | * | * | * | Y | |
映射引用 | * | * | * | N | |
映射键 | * | Y | |||
映射值 | * | Y | |||
映射条件 | * | N | |||
扫描 | * | Y | |||
扫描引用 | * | N |
检查
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
全部 | * | * | * | * | N |
任何 | * | * | * | * | N |
公共前缀长度 | * | * | N | ||
公共后缀长度 | * | * | N | ||
按计数 | * | * | * | * | N |
计数唯一 | * | * | * | N | |
非交集 | * | * | * | * | N |
等价 | * | * | N | ||
频率 | * | * | N | ||
按频率排序 | * | * | N | ||
子集 | * | * | * | * | N |
超集 | * | * | * | * | N |
聚合
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
折叠 | * | * | * | Y | |
折叠引用 | * | * | * | * | N |
分组折叠 | * | * | Y | ||
分组折叠引用 | * | * | * | N | |
分组减少 | * | * | Y | ||
分组减少引用 | * | * | * | N | |
乘积 | * | * | Y | ||
乘积键 | * | Y | |||
乘积值 | * | Y | |||
减少 | * | * | * | Y | |
减少引用 | * | * | * | * | N |
递归折叠 | * | Y | |||
递归折叠引用 | * | * | N | ||
总和 | * | * | Y | ||
总和键 | * | Y | |||
总和值 | * | Y |
选择
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
分块 | * | Y | |||
按分块排序 | * | Y | |||
精确分块 | * | Y | |||
笛卡尔积 | * | N | |||
组合 | * | * | N | ||
多组合 | * | N | |||
幂集 | * | * | N | ||
排列 | * | N | |||
窗口 | * | N | |||
环形窗口 | * | N |
分区
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
分割 | * | Y | |||
按分割排序 | * | Y | |||
按组排序 | * | * | Y | ||
分区 | * | * | * | Y | |
分区 | * | * | N | ||
分区映射 | * | * | * | Y | |
分区映射引用 | * | * | * | N | |
解包 | * | Y |
合并
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
扁平化 | * | * | Y | ||
交错 | * | Y | |||
精确交错 | * | Y | |||
插入 | * | Y | |||
插入... | * | Y | |||
连接 | * | N | |||
合并 | * | Y | |||
按合并排序 | * | Y | |||
连接 | * | Y | |||
填充 | * | Y |
排序
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
排序 | * | Y | |||
按排序排序 | * | Y | |||
按缓存键排序 | * | Y | |||
按键排序 | * | Y | |||
不稳定排序 | * | Y | |||
按排序排序 | * | Y | |||
按键排序 | * | Y |
转换
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
收集 | * | * | * | Y | |
到_bmap | * | * | * | Y | |
到_bset | * | * | * | Y | |
到_heap | * | * | * | Y | |
到_keys | * | Y | |||
到_list | * | * | * | Y | |
到_map | * | * | * | Y | |
到_set | * | * | * | Y | |
到_values | * | Y | |||
到_vec | * | * | * | Y | |
到_deque | * | * | * | Y |
杂项
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
填充 | * | Y | |||
用... | * | * | * | Y | |
遍历 | * | * | * | * | N |
重复 | * | ||||
单元 | * | * | * | Y |
灵感来自
构建
需求
- Rust 1.80+
设置
cargo install cargo-make
测试
makers build
基准
makers bench
贡献
请随时打开问题或拉取请求,提出问题、想法、功能、改进或修复。
许可证
根据您的选择,受以下许可证之一许可:
- Apache 许可证 2.0 (LICENSE-APACHE或https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT或http://opensource.org/licenses/MIT)
。
Rust标准库集合的实用扩展方法。
允许直接以函数式风格操作集合,而不使用通常的迭代器样板代码。
特性
- 将标准迭代器方法添加到标准库集合中
- 还包括在集合库中常见的一些附加实用方法
- 转换方法返回新的集合实例,而不是返回迭代器
- 所有方法都将集合实例视为不可变,尽管其中一些可能会消耗它们
- 性能接近最优,开销仅限于新集合的创建
示例
use cantrip::*;
let a = vec![1, 2, 3];
a.fold(0, |r, x| r + x); // 6
a.map_ref(|&x| (x, x + 1)).to_map(); // HashMap::from([(1, 2), (2, 3), (3, 4)])
a.flat_map(|x| [x, -x]).sorted(); // vec![-3, -2, -1, 1, 2, 3]
a.filter(|&x| x > 1).into_set(); // HashSet::from([2, 3])
a.group_by(|x| x % 2); // HashMap::from([(0, vec![2]), (1, vec![1, 3])])
a.delete(&1).add(2).unique(); // vec![2, 3]
a.substitute_at(0, 4).to_list(); // LinkedList::from([4, 2, 3])
a.position_multi(|&x| x % 2 == 1); // vec![0, 2]
a.rev().into_iter().into_deque(); // VecDeque::from([3, 2, 1])
方法
搜索
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
find | * | * | * | * | N |
find_map | * | * | * | Y | |
find_map_ref | * | * | * | * | N |
find_position | * | * | N | ||
first | * | * | N | ||
last | * | N | |||
position | * | * | N | ||
position_multi | * | * | N | ||
position_of | * | * | N | ||
position_of_multi | * | * | N | ||
position_sequence | * | * | N | ||
rfind | * | * | N | ||
rposition | * | * | N |
修改
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
add | * | * | * | Y | |
add_at | * | Y | |||
add_at_multi | * | Y | |||
add_multi | * | * | * | Y | |
合并 | * | Y | |||
delete | * | * | * | Y | |
delete_at | * | Y | |||
delete_at_multi | * | Y | |||
delete_multi | * | * | * | Y | |
枚举 | * | Y | |||
映射 | * | * | * | Y | |
映射引用 | * | * | * | N | |
映射键 | * | Y | |||
映射值 | * | Y | |||
映射条件 | * | N | |||
move_at | * | Y | |||
pad_left | * | Y | |||
pad_left_with | * | Y | |||
pad_right | * | Y | |||
pad_right_with | * | Y | |||
rev | * | Y | |||
扫描 | * | Y | |||
扫描引用 | * | N | |||
substitute | * | * | * | Y | |
substitute_at | * | Y | |||
substitute_at_multi | * | Y | |||
substitute_multi | * | * | * | Y | |
swap_at | * | Y |
过滤
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
duplicates | * | Y | |||
duplicates_by | * | Y | |||
filter | * | * | * | Y | |
filter_keys | * | Y | |||
filter_map | * | * | * | Y | |
filter_map_ref | * | * | * | N | |
filter_ref | * | * | * | N | |
filter_values | * | Y | |||
init | * | * | Y | ||
largest | * | * | Y | ||
slice | * | Y | |||
smallest | * | * | Y | ||
skip | * | * | Y | ||
skip_while | * | * | Y | ||
step_by | * | Y | |||
take | * | * | Y | ||
take_while | * | * | Y | ||
独特 | * | Y | |||
按独特性排序 | * | Y | |||
尾部 | * | * | Y |
检查
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
全部 | * | * | * | * | N |
任何 | * | * | * | * | N |
公共前缀长度 | * | * | N | ||
公共后缀长度 | * | * | N | ||
非交集 | * | * | * | * | N |
等价 | * | * | N | ||
intersect | * | * | * | Y | |
子集 | * | * | * | * | N |
超集 | * | * | * | * | N |
聚合
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
按计数 | * | * | * | * | N |
计数唯一 | * | * | * | N | |
折叠 | * | * | * | Y | |
折叠引用 | * | * | * | * | N |
频率 | * | * | N | ||
按频率排序 | * | * | N | ||
分组折叠 | * | * | Y | ||
分组折叠引用 | * | * | * | N | |
分组减少 | * | * | Y | ||
分组减少引用 | * | * | * | N | |
max_by | * | * | * | * | N |
max_by_key | * | * | * | * | N |
max_of | * | * | * | * | N |
min_by | * | * | * | * | N |
min_by_key | * | * | * | * | N |
min_of | * | * | * | * | N |
minmax_by | * | * | * | * | N |
minmax_by_key | * | * | * | * | N |
minmax_of | * | * | * | * | N |
乘积 | * | * | Y | ||
乘积键 | * | Y | |||
乘积值 | * | Y | |||
减少 | * | * | * | Y | |
减少引用 | * | * | * | * | N |
递归折叠 | * | Y | |||
递归折叠引用 | * | * | N | ||
总和 | * | * | Y | ||
总和键 | * | Y | |||
总和值 | * | Y |
选择
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
分块 | * | Y | |||
按分块排序 | * | Y | |||
精确分块 | * | Y | |||
笛卡尔积 | * | N | |||
组合 | * | * | N | ||
多组合 | * | N | |||
幂集 | * | * | N | ||
排列 | * | N | |||
窗口 | * | N | |||
环形窗口 | * | N |
分区
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
分割 | * | Y | |||
按分割排序 | * | Y | |||
按组排序 | * | * | Y | ||
分区 | * | * | * | Y | |
分区映射 | * | * | * | Y | |
分区映射引用 | * | * | * | N | |
解包 | * | Y |
合并
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
扁平映射 | * | * | * | Y | |
扁平映射引用 | * | * | * | N | |
扁平化 | * | * | Y | ||
交错 | * | Y | |||
精确交错 | * | Y | |||
插入 | * | Y | |||
插入... | * | Y | |||
连接 | * | N | |||
合并 | * | Y | |||
按合并排序 | * | Y | |||
连接 | * | Y | |||
填充 | * | Y |
排序
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
排序 | * | Y | |||
按排序排序 | * | Y | |||
按缓存键排序 | * | Y | |||
按键排序 | * | Y | |||
不稳定排序 | * | Y | |||
按排序排序 | * | Y | |||
按键排序 | * | Y |
转换
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
收集 | * | * | * | * | N |
collect_to | * | * | * | * | Y |
into_bmap | * | * | * | Y | |
into_bset | * | * | * | Y | |
into_heap | * | * | * | Y | |
into_list | * | * | * | Y | |
into_map | * | * | * | Y | |
into_set | * | * | * | Y | |
into_vec | * | * | * | * | Y |
into_deque | * | * | * | Y | |
到_bmap | * | * | * | * | N |
到_bset | * | * | * | * | N |
到_heap | * | * | * | * | N |
到_keys | * | N | |||
到_list | * | * | * | * | N |
到_map | * | * | * | * | N |
到_set | * | * | * | * | N |
到_values | * | N | |||
到_vec | * | * | * | * | N |
到_deque | * | * | * | * | N |
杂项
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
填充 | * | Y | |||
用... | * | * | * | Y | |
遍历 | * | * | * | * | N |
重复 | * | ||||
单元 | * | * | * | Y |
灵感来自
构建
需求
- Rust 1.80+
设置
cargo install cargo-make
测试
makers build
基准
makers bench
贡献
请随时打开问题或拉取请求,提出问题、想法、功能、改进或修复。
许可证
根据您的选择,受以下许可证之一许可:
- Apache 许可证 2.0 (LICENSE-APACHE或https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT或http://opensource.org/licenses/MIT)
。
Rust标准库集合的实用扩展方法。
允许直接以函数式风格操作集合,而不使用通常的迭代器样板代码。
特性
- 将标准迭代器方法添加到标准库集合中
- 还包括在集合库中常见的一些附加实用方法
- 转换方法返回新的集合实例,而不是返回迭代器
- 所有方法都将集合实例视为不可变,尽管其中一些可能会消耗它们
- 性能接近最优,开销仅限于新集合的创建
示例
use cantrip::*;
let a = vec![1, 2, 3];
a.fold(0, |r, x| r + x); // 6
a.map_ref(|&x| (x, x + 1)).to_map(); // HashMap::from([(1, 2), (2, 3), (3, 4)])
a.flat_map(|x| [x, -x]).sorted(); // vec![-3, -2, -1, 1, 2, 3]
a.filter(|&x| x > 1).into_set(); // HashSet::from([2, 3])
a.group_by(|x| x % 2); // HashMap::from([(0, vec![2]), (1, vec![1, 3])])
a.delete(&1).add(2).unique(); // vec![2, 3]
a.substitute_at(0, 4).to_list(); // LinkedList::from([4, 2, 3])
a.position_multi(|&x| x % 2 == 1); // vec![0, 2]
a.rev().into_iter().into_deque(); // VecDeque::from([3, 2, 1])
方法
搜索
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
find | * | * | * | * | N |
find_map | * | * | * | Y | |
find_map_ref | * | * | * | * | N |
find_position | * | * | N | ||
first | * | * | N | ||
last | * | N | |||
position | * | * | N | ||
position_multi | * | * | N | ||
position_of | * | * | N | ||
position_of_multi | * | * | N | ||
position_sequence | * | * | N | ||
rfind | * | * | N | ||
rposition | * | * | N |
修改
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
add | * | * | * | Y | |
add_at | * | Y | |||
add_at_multi | * | Y | |||
add_multi | * | * | * | Y | |
合并 | * | Y | |||
delete | * | * | * | Y | |
delete_at | * | Y | |||
delete_at_multi | * | Y | |||
delete_multi | * | * | * | Y | |
枚举 | * | Y | |||
映射 | * | * | * | Y | |
映射引用 | * | * | * | N | |
映射键 | * | Y | |||
映射值 | * | Y | |||
映射条件 | * | N | |||
move_at | * | Y | |||
pad_left | * | Y | |||
pad_left_with | * | Y | |||
pad_right | * | Y | |||
pad_right_with | * | Y | |||
rev | * | Y | |||
扫描 | * | Y | |||
扫描引用 | * | N | |||
substitute | * | * | * | Y | |
substitute_at | * | Y | |||
substitute_at_multi | * | Y | |||
substitute_multi | * | * | * | Y | |
swap_at | * | Y |
过滤
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
duplicates | * | Y | |||
duplicates_by | * | Y | |||
filter | * | * | * | Y | |
filter_keys | * | Y | |||
filter_map | * | * | * | Y | |
filter_map_ref | * | * | * | N | |
filter_ref | * | * | * | N | |
filter_values | * | Y | |||
init | * | * | Y | ||
largest | * | * | Y | ||
slice | * | Y | |||
smallest | * | * | Y | ||
skip | * | * | Y | ||
skip_while | * | * | Y | ||
step_by | * | Y | |||
take | * | * | Y | ||
take_while | * | * | Y | ||
独特 | * | Y | |||
按独特性排序 | * | Y | |||
尾部 | * | * | Y |
检查
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
全部 | * | * | * | * | N |
任何 | * | * | * | * | N |
公共前缀长度 | * | * | N | ||
公共后缀长度 | * | * | N | ||
非交集 | * | * | * | * | N |
等价 | * | * | N | ||
intersect | * | * | * | Y | |
子集 | * | * | * | * | N |
超集 | * | * | * | * | N |
聚合
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
按计数 | * | * | * | * | N |
计数唯一 | * | * | * | N | |
折叠 | * | * | * | Y | |
折叠引用 | * | * | * | * | N |
频率 | * | * | N | ||
按频率排序 | * | * | N | ||
分组折叠 | * | * | Y | ||
分组折叠引用 | * | * | * | N | |
分组减少 | * | * | Y | ||
分组减少引用 | * | * | * | N | |
max_by | * | * | * | * | N |
max_by_key | * | * | * | * | N |
max_of | * | * | * | * | N |
min_by | * | * | * | * | N |
min_by_key | * | * | * | * | N |
min_of | * | * | * | * | N |
minmax_by | * | * | * | * | N |
minmax_by_key | * | * | * | * | N |
minmax_of | * | * | * | * | N |
乘积 | * | * | Y | ||
乘积键 | * | Y | |||
乘积值 | * | Y | |||
减少 | * | * | * | Y | |
减少引用 | * | * | * | * | N |
递归折叠 | * | Y | |||
递归折叠引用 | * | * | N | ||
总和 | * | * | Y | ||
总和键 | * | Y | |||
总和值 | * | Y |
选择
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
分块 | * | Y | |||
按分块排序 | * | Y | |||
精确分块 | * | Y | |||
笛卡尔积 | * | N | |||
组合 | * | * | N | ||
多组合 | * | N | |||
幂集 | * | * | N | ||
排列 | * | N | |||
窗口 | * | N | |||
环形窗口 | * | N |
分区
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
分割 | * | Y | |||
按分割排序 | * | Y | |||
按组排序 | * | * | Y | ||
分区 | * | * | * | Y | |
分区映射 | * | * | * | Y | |
分区映射引用 | * | * | * | N | |
解包 | * | Y |
合并
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
扁平映射 | * | * | * | Y | |
扁平映射引用 | * | * | * | N | |
扁平化 | * | * | Y | ||
交错 | * | Y | |||
精确交错 | * | Y | |||
插入 | * | Y | |||
插入... | * | Y | |||
连接 | * | N | |||
合并 | * | Y | |||
按合并排序 | * | Y | |||
连接 | * | Y | |||
填充 | * | Y |
排序
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
排序 | * | Y | |||
按排序排序 | * | Y | |||
按缓存键排序 | * | Y | |||
按键排序 | * | Y | |||
不稳定排序 | * | Y | |||
按排序排序 | * | Y | |||
按键排序 | * | Y |
转换
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
收集 | * | * | * | * | N |
collect_to | * | * | * | * | Y |
into_bmap | * | * | * | Y | |
into_bset | * | * | * | Y | |
into_heap | * | * | * | Y | |
into_list | * | * | * | Y | |
into_map | * | * | * | Y | |
into_set | * | * | * | Y | |
into_vec | * | * | * | * | Y |
into_deque | * | * | * | Y | |
到_bmap | * | * | * | * | N |
到_bset | * | * | * | * | N |
到_heap | * | * | * | * | N |
到_keys | * | N | |||
到_list | * | * | * | * | N |
到_map | * | * | * | * | N |
到_set | * | * | * | * | N |
到_values | * | N | |||
到_vec | * | * | * | * | N |
到_deque | * | * | * | * | N |
杂项
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
填充 | * | Y | |||
用... | * | * | * | Y | |
遍历 | * | * | * | * | N |
重复 | * | ||||
单元 | * | * | * | Y |
灵感来自
构建
需求
- Rust 1.80+
设置
cargo install cargo-make
测试
makers build
基准
makers bench
贡献
请随时打开问题或拉取请求,提出问题、想法、功能、改进或修复。
许可证
根据您的选择,受以下许可证之一许可:
- Apache 许可证 2.0 (LICENSE-APACHE或https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT或http://opensource.org/licenses/MIT)
。
Rust标准库集合的实用扩展方法。
允许直接以函数式风格操作集合,而不使用通常的迭代器样板代码。
特性
- 将标准迭代器方法添加到标准库集合中
- 还包括在集合库中常见的一些附加实用方法
- 转换方法返回新的集合实例,而不是返回迭代器
- 所有方法都将集合实例视为不可变,尽管其中一些可能会消耗它们
- 性能接近最优,开销仅限于新集合的创建
示例
use cantrip::*;
let a = vec![1, 2, 3];
a.fold(0, |r, x| r + x); // 6
a.map_ref(|&x| (x, x + 1)).to_map(); // HashMap::from([(1, 2), (2, 3), (3, 4)])
a.flat_map(|x| [x, -x]).sorted(); // vec![-3, -2, -1, 1, 2, 3]
a.filter(|&x| x > 1).into_set(); // HashSet::from([2, 3])
a.group_by(|x| x % 2); // HashMap::from([(0, vec![2]), (1, vec![1, 3])])
a.delete(&1).add(2).unique(); // vec![2, 3]
a.substitute_at(0, 4).to_list(); // LinkedList::from([4, 2, 3])
a.position_multi(|&x| x % 2 == 1); // vec![0, 2]
a.rev().into_iter().into_deque(); // VecDeque::from([3, 2, 1])
方法
搜索
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
find | * | * | * | * | N |
find_map | * | * | * | Y | |
find_map_ref | * | * | * | * | N |
find_position | * | * | N | ||
first | * | * | N | ||
last | * | N | |||
position | * | * | N | ||
position_multi | * | * | N | ||
position_of | * | * | N | ||
position_of_multi | * | * | N | ||
position_sequence | * | * | N | ||
rfind | * | * | N | ||
rposition | * | * | N |
修改
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
add | * | * | * | Y | |
add_at | * | Y | |||
add_at_multi | * | Y | |||
add_multi | * | * | * | Y | |
合并 | * | Y | |||
delete | * | * | * | Y | |
delete_at | * | Y | |||
delete_at_multi | * | Y | |||
delete_multi | * | * | * | Y | |
枚举 | * | Y | |||
映射 | * | * | * | Y | |
映射引用 | * | * | * | N | |
映射键 | * | Y | |||
映射值 | * | Y | |||
映射条件 | * | N | |||
move_at | * | Y | |||
pad_left | * | Y | |||
pad_left_with | * | Y | |||
pad_right | * | Y | |||
pad_right_with | * | Y | |||
rev | * | Y | |||
扫描 | * | Y | |||
扫描引用 | * | N | |||
substitute | * | * | * | Y | |
substitute_at | * | Y | |||
substitute_at_multi | * | Y | |||
substitute_multi | * | * | * | Y | |
swap_at | * | Y |
过滤
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
duplicates | * | Y | |||
duplicates_by | * | Y | |||
filter | * | * | * | Y | |
filter_keys | * | Y | |||
filter_map | * | * | * | Y | |
filter_map_ref | * | * | * | N | |
filter_ref | * | * | * | N | |
filter_values | * | Y | |||
init | * | * | Y | ||
largest | * | * | Y | ||
slice | * | Y | |||
smallest | * | * | Y | ||
skip | * | * | Y | ||
skip_while | * | * | Y | ||
step_by | * | Y | |||
take | * | * | Y | ||
take_while | * | * | Y | ||
独特 | * | Y | |||
按独特性排序 | * | Y | |||
尾部 | * | * | Y |
检查
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
全部 | * | * | * | * | N |
任何 | * | * | * | * | N |
公共前缀长度 | * | * | N | ||
公共后缀长度 | * | * | N | ||
非交集 | * | * | * | * | N |
等价 | * | * | N | ||
intersect | * | * | * | Y | |
子集 | * | * | * | * | N |
超集 | * | * | * | * | N |
聚合
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
按计数 | * | * | * | * | N |
计数唯一 | * | * | * | N | |
折叠 | * | * | * | Y | |
折叠引用 | * | * | * | * | N |
频率 | * | * | N | ||
按频率排序 | * | * | N | ||
分组折叠 | * | * | Y | ||
分组折叠引用 | * | * | * | N | |
分组减少 | * | * | Y | ||
分组减少引用 | * | * | * | N | |
max_by | * | * | * | * | N |
max_by_key | * | * | * | * | N |
max_of | * | * | * | * | N |
min_by | * | * | * | * | N |
min_by_key | * | * | * | * | N |
min_of | * | * | * | * | N |
minmax_by | * | * | * | * | N |
minmax_by_key | * | * | * | * | N |
minmax_of | * | * | * | * | N |
乘积 | * | * | Y | ||
乘积键 | * | Y | |||
乘积值 | * | Y | |||
减少 | * | * | * | Y | |
减少引用 | * | * | * | * | N |
递归折叠 | * | Y | |||
递归折叠引用 | * | * | N | ||
总和 | * | * | Y | ||
总和键 | * | Y | |||
总和值 | * | Y |
选择
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
分块 | * | Y | |||
按分块排序 | * | Y | |||
精确分块 | * | Y | |||
笛卡尔积 | * | N | |||
组合 | * | * | N | ||
多组合 | * | N | |||
幂集 | * | * | N | ||
排列 | * | N | |||
窗口 | * | N | |||
环形窗口 | * | N |
分区
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
分割 | * | Y | |||
按分割排序 | * | Y | |||
按组排序 | * | * | Y | ||
分区 | * | * | * | Y | |
分区映射 | * | * | * | Y | |
分区映射引用 | * | * | * | N | |
解包 | * | Y |
合并
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
扁平映射 | * | * | * | Y | |
扁平映射引用 | * | * | * | N | |
扁平化 | * | * | Y | ||
交错 | * | Y | |||
精确交错 | * | Y | |||
插入 | * | Y | |||
插入... | * | Y | |||
连接 | * | N | |||
合并 | * | Y | |||
按合并排序 | * | Y | |||
连接 | * | Y | |||
填充 | * | Y |
排序
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
排序 | * | Y | |||
按排序排序 | * | Y | |||
按缓存键排序 | * | Y | |||
按键排序 | * | Y | |||
不稳定排序 | * | Y | |||
按排序排序 | * | Y | |||
按键排序 | * | Y |
转换
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
收集 | * | * | * | * | N |
collect_to | * | * | * | * | Y |
into_bmap | * | * | * | Y | |
into_bset | * | * | * | Y | |
into_heap | * | * | * | Y | |
into_list | * | * | * | Y | |
into_map | * | * | * | Y | |
into_set | * | * | * | Y | |
into_vec | * | * | * | * | Y |
into_deque | * | * | * | Y | |
到_bmap | * | * | * | * | N |
到_bset | * | * | * | * | N |
到_heap | * | * | * | * | N |
到_keys | * | N | |||
到_list | * | * | * | * | N |
到_map | * | * | * | * | N |
到_set | * | * | * | * | N |
到_values | * | N | |||
到_vec | * | * | * | * | N |
到_deque | * | * | * | * | N |
杂项
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
填充 | * | Y | |||
用... | * | * | * | Y | |
遍历 | * | * | * | * | N |
重复 | * | ||||
单元 | * | * | * | Y |
灵感来自
构建
需求
- Rust 1.80+
设置
cargo install cargo-make
测试
makers build
基准
makers bench
贡献
请随时打开问题或拉取请求,提出问题、想法、功能、改进或修复。
许可证
根据您的选择,受以下许可证之一许可:
- Apache 许可证 2.0 (LICENSE-APACHE或https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT或http://opensource.org/licenses/MIT)
。
Rust标准库集合的实用扩展方法。
允许直接以函数式风格操作集合,而不使用通常的迭代器样板代码。
特性
- 将标准迭代器方法添加到标准库集合中
- 还包括在集合库中常见的一些附加实用方法
- 转换方法返回新的集合实例,而不是返回迭代器
- 所有方法都将集合实例视为不可变,尽管其中一些可能会消耗它们
- 性能接近最优,开销仅限于新集合的创建
示例
use cantrip::*;
let a = vec![1, 2, 3];
a.fold(0, |r, x| r + x); // 6
a.map_ref(|&x| (x, x + 1)).to_map(); // HashMap::from([(1, 2), (2, 3), (3, 4)])
a.flat_map(|x| [x, -x]).sorted(); // vec![-3, -2, -1, 1, 2, 3]
a.filter(|&x| x > 1).into_set(); // HashSet::from([2, 3])
a.group_by(|x| x % 2); // HashMap::from([(0, vec![2]), (1, vec![1, 3])])
a.delete(&1).add(2).unique(); // vec![2, 3]
a.substitute_at(0, 4).to_list(); // LinkedList::from([4, 2, 3])
a.position_multi(|&x| x % 2 == 1); // vec![0, 2]
a.rev().into_iter().into_deque(); // VecDeque::from([3, 2, 1])
方法
搜索
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
find | * | * | * | * | N |
find_map | * | * | * | Y | |
find_map_ref | * | * | * | * | N |
find_position | * | * | N | ||
first | * | * | N | ||
last | * | N | |||
position | * | * | N | ||
position_multi | * | * | N | ||
position_of | * | * | N | ||
position_of_multi | * | * | N | ||
position_sequence | * | * | N | ||
rfind | * | * | N | ||
rposition | * | * | N |
修改
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
add | * | * | * | Y | |
add_at | * | Y | |||
add_at_multi | * | Y | |||
add_multi | * | * | * | Y | |
合并 | * | Y | |||
delete | * | * | * | Y | |
delete_at | * | Y | |||
delete_at_multi | * | Y | |||
delete_multi | * | * | * | Y | |
枚举 | * | Y | |||
映射 | * | * | * | Y | |
映射引用 | * | * | * | N | |
映射键 | * | Y | |||
映射值 | * | Y | |||
映射条件 | * | N | |||
move_at | * | Y | |||
pad_left | * | Y | |||
pad_left_with | * | Y | |||
pad_right | * | Y | |||
pad_right_with | * | Y | |||
rev | * | Y | |||
扫描 | * | Y | |||
扫描引用 | * | N | |||
substitute | * | * | * | Y | |
substitute_at | * | Y | |||
substitute_at_multi | * | Y | |||
substitute_multi | * | * | * | Y | |
swap_at | * | Y |
过滤
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
duplicates | * | Y | |||
duplicates_by | * | Y | |||
filter | * | * | * | Y | |
filter_keys | * | Y | |||
filter_map | * | * | * | Y | |
filter_map_ref | * | * | * | N | |
filter_ref | * | * | * | N | |
filter_values | * | Y | |||
init | * | * | Y | ||
largest | * | * | Y | ||
slice | * | Y | |||
smallest | * | * | Y | ||
skip | * | * | Y | ||
skip_while | * | * | Y | ||
step_by | * | Y | |||
take | * | * | Y | ||
take_while | * | * | Y | ||
独特 | * | Y | |||
按独特性排序 | * | Y | |||
尾部 | * | * | Y |
检查
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
全部 | * | * | * | * | N |
任何 | * | * | * | * | N |
公共前缀长度 | * | * | N | ||
公共后缀长度 | * | * | N | ||
非交集 | * | * | * | * | N |
等价 | * | * | N | ||
intersect | * | * | * | Y | |
子集 | * | * | * | * | N |
超集 | * | * | * | * | N |
聚合
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
按计数 | * | * | * | * | N |
计数唯一 | * | * | * | N | |
折叠 | * | * | * | Y | |
折叠引用 | * | * | * | * | N |
频率 | * | * | N | ||
按频率排序 | * | * | N | ||
分组折叠 | * | * | Y | ||
分组折叠引用 | * | * | * | N | |
分组减少 | * | * | Y | ||
分组减少引用 | * | * | * | N | |
max_by | * | * | * | * | N |
max_by_key | * | * | * | * | N |
max_of | * | * | * | * | N |
min_by | * | * | * | * | N |
min_by_key | * | * | * | * | N |
min_of | * | * | * | * | N |
minmax_by | * | * | * | * | N |
minmax_by_key | * | * | * | * | N |
minmax_of | * | * | * | * | N |
乘积 | * | * | Y | ||
乘积键 | * | Y | |||
乘积值 | * | Y | |||
减少 | * | * | * | Y | |
减少引用 | * | * | * | * | N |
递归折叠 | * | Y | |||
递归折叠引用 | * | * | N | ||
总和 | * | * | Y | ||
总和键 | * | Y | |||
总和值 | * | Y |
选择
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
分块 | * | Y | |||
按分块排序 | * | Y | |||
精确分块 | * | Y | |||
笛卡尔积 | * | N | |||
组合 | * | * | N | ||
多组合 | * | N | |||
幂集 | * | * | N | ||
排列 | * | N | |||
窗口 | * | N | |||
环形窗口 | * | N |
分区
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
分割 | * | Y | |||
按分割排序 | * | Y | |||
按组排序 | * | * | Y | ||
分区 | * | * | * | Y | |
分区映射 | * | * | * | Y | |
分区映射引用 | * | * | * | N | |
解包 | * | Y |
合并
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
扁平映射 | * | * | * | Y | |
扁平映射引用 | * | * | * | N | |
扁平化 | * | * | Y | ||
交错 | * | Y | |||
精确交错 | * | Y | |||
插入 | * | Y | |||
插入... | * | Y | |||
连接 | * | N | |||
合并 | * | Y | |||
按合并排序 | * | Y | |||
连接 | * | Y | |||
填充 | * | Y |
排序
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
排序 | * | Y | |||
按排序排序 | * | Y | |||
按缓存键排序 | * | Y | |||
按键排序 | * | Y | |||
不稳定排序 | * | Y | |||
按排序排序 | * | Y | |||
按键排序 | * | Y |
转换
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
收集 | * | * | * | * | N |
collect_to | * | * | * | * | Y |
into_bmap | * | * | * | Y | |
into_bset | * | * | * | Y | |
into_heap | * | * | * | Y | |
into_list | * | * | * | Y | |
into_map | * | * | * | Y | |
into_set | * | * | * | Y | |
into_vec | * | * | * | * | Y |
into_deque | * | * | * | Y | |
到_bmap | * | * | * | * | N |
到_bset | * | * | * | * | N |
到_heap | * | * | * | * | N |
到_keys | * | N | |||
到_list | * | * | * | * | N |
到_map | * | * | * | * | N |
到_set | * | * | * | * | N |
到_values | * | N | |||
到_vec | * | * | * | * | N |
到_deque | * | * | * | * | N |
杂项
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
填充 | * | Y | |||
用... | * | * | * | Y | |
遍历 | * | * | * | * | N |
重复 | * | ||||
单元 | * | * | * | Y |
灵感来自
构建
需求
- Rust 1.80+
设置
cargo install cargo-make
测试
makers build
基准
makers bench
贡献
请随时打开问题或拉取请求,提出问题、想法、功能、改进或修复。
许可证
根据您的选择,受以下许可证之一许可:
- Apache 许可证 2.0 (LICENSE-APACHE或https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT或http://opensource.org/licenses/MIT)
。
Rust标准库集合的实用扩展方法。
允许直接以函数式风格操作集合,而不使用通常的迭代器样板代码。
特性
- 将标准迭代器方法添加到标准库集合中
- 还包括在集合库中常见的一些附加实用方法
- 转换方法返回新的集合实例,而不是返回迭代器
- 所有方法都将集合实例视为不可变,尽管其中一些可能会消耗它们
- 性能接近最优,开销仅限于新集合的创建
示例
use cantrip::*;
let a = vec![1, 2, 3];
a.fold(0, |r, x| r + x); // 6
a.map_ref(|&x| (x, x + 1)).to_map(); // HashMap::from([(1, 2), (2, 3), (3, 4)])
a.flat_map(|x| [x, -x]).sorted(); // vec![-3, -2, -1, 1, 2, 3]
a.filter(|&x| x > 1).into_set(); // HashSet::from([2, 3])
a.group_by(|x| x % 2); // HashMap::from([(0, vec![2]), (1, vec![1, 3])])
a.delete(&1).add(2).unique(); // vec![2, 3]
a.substitute_at(0, 4).to_list(); // LinkedList::from([4, 2, 3])
a.position_multi(|&x| x % 2 == 1); // vec![0, 2]
a.rev().into_iter().into_deque(); // VecDeque::from([3, 2, 1])
方法
搜索
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
find | * | * | * | * | N |
find_map | * | * | * | Y | |
find_map_ref | * | * | * | * | N |
find_position | * | * | N | ||
first | * | * | N | ||
last | * | N | |||
position | * | * | N | ||
position_multi | * | * | N | ||
position_of | * | * | N | ||
position_of_multi | * | * | N | ||
position_sequence | * | * | N | ||
rfind | * | * | N | ||
rposition | * | * | N |
修改
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
add | * | * | * | Y | |
add_at | * | Y | |||
add_at_multi | * | Y | |||
add_multi | * | * | * | Y | |
合并 | * | Y | |||
delete | * | * | * | Y | |
delete_at | * | Y | |||
delete_at_multi | * | Y | |||
delete_multi | * | * | * | Y | |
枚举 | * | Y | |||
映射 | * | * | * | Y | |
映射引用 | * | * | * | N | |
映射键 | * | Y | |||
映射值 | * | Y | |||
映射条件 | * | N | |||
move_at | * | Y | |||
pad_left | * | Y | |||
pad_left_with | * | Y | |||
pad_right | * | Y | |||
pad_right_with | * | Y | |||
rev | * | Y | |||
扫描 | * | Y | |||
扫描引用 | * | N | |||
substitute | * | * | * | Y | |
substitute_at | * | Y | |||
substitute_at_multi | * | Y | |||
substitute_multi | * | * | * | Y | |
swap_at | * | Y |
过滤
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
duplicates | * | Y | |||
duplicates_by | * | Y | |||
filter | * | * | * | Y | |
filter_keys | * | Y | |||
filter_map | * | * | * | Y | |
filter_map_ref | * | * | * | N | |
filter_ref | * | * | * | N | |
filter_values | * | Y | |||
init | * | * | Y | ||
largest | * | * | Y | ||
slice | * | Y | |||
smallest | * | * | Y | ||
skip | * | * | Y | ||
skip_while | * | * | Y | ||
step_by | * | Y | |||
take | * | * | Y | ||
take_while | * | * | Y | ||
独特 | * | Y | |||
按独特性排序 | * | Y | |||
尾部 | * | * | Y |
检查
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
全部 | * | * | * | * | N |
任何 | * | * | * | * | N |
公共前缀长度 | * | * | N | ||
公共后缀长度 | * | * | N | ||
非交集 | * | * | * | * | N |
等价 | * | * | N | ||
intersect | * | * | * | Y | |
子集 | * | * | * | * | N |
超集 | * | * | * | * | N |
聚合
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
按计数 | * | * | * | * | N |
计数唯一 | * | * | * | N | |
折叠 | * | * | * | Y | |
折叠引用 | * | * | * | * | N |
频率 | * | * | N | ||
按频率排序 | * | * | N | ||
分组折叠 | * | * | Y | ||
分组折叠引用 | * | * | * | N | |
分组减少 | * | * | Y | ||
分组减少引用 | * | * | * | N | |
max_by | * | * | * | * | N |
max_by_key | * | * | * | * | N |
max_of | * | * | * | * | N |
min_by | * | * | * | * | N |
min_by_key | * | * | * | * | N |
min_of | * | * | * | * | N |
minmax_by | * | * | * | * | N |
minmax_by_key | * | * | * | * | N |
minmax_of | * | * | * | * | N |
乘积 | * | * | Y | ||
乘积键 | * | Y | |||
乘积值 | * | Y | |||
减少 | * | * | * | Y | |
减少引用 | * | * | * | * | N |
递归折叠 | * | Y | |||
递归折叠引用 | * | * | N | ||
总和 | * | * | Y | ||
总和键 | * | Y | |||
总和值 | * | Y |
选择
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
分块 | * | Y | |||
按分块排序 | * | Y | |||
精确分块 | * | Y | |||
笛卡尔积 | * | N | |||
组合 | * | * | N | ||
多组合 | * | N | |||
幂集 | * | * | N | ||
排列 | * | N | |||
窗口 | * | N | |||
环形窗口 | * | N |
分区
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
分割 | * | Y | |||
按分割排序 | * | Y | |||
按组排序 | * | * | Y | ||
分区 | * | * | * | Y | |
分区映射 | * | * | * | Y | |
分区映射引用 | * | * | * | N | |
解包 | * | Y |
合并
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
扁平映射 | * | * | * | Y | |
扁平映射引用 | * | * | * | N | |
扁平化 | * | * | Y | ||
交错 | * | Y | |||
精确交错 | * | Y | |||
插入 | * | Y | |||
插入... | * | Y | |||
连接 | * | N | |||
合并 | * | Y | |||
按合并排序 | * | Y | |||
连接 | * | Y | |||
填充 | * | Y |
排序
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
排序 | * | Y | |||
按排序排序 | * | Y | |||
按缓存键排序 | * | Y | |||
按键排序 | * | Y | |||
不稳定排序 | * | Y | |||
按排序排序 | * | Y | |||
按键排序 | * | Y |
转换
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
收集 | * | * | * | * | N |
collect_to | * | * | * | * | Y |
into_bmap | * | * | * | Y | |
into_bset | * | * | * | Y | |
into_heap | * | * | * | Y | |
into_list | * | * | * | Y | |
into_map | * | * | * | Y | |
into_set | * | * | * | Y | |
into_vec | * | * | * | * | Y |
into_deque | * | * | * | Y | |
到_bmap | * | * | * | * | N |
到_bset | * | * | * | * | N |
到_heap | * | * | * | * | N |
到_keys | * | N | |||
到_list | * | * | * | * | N |
到_map | * | * | * | * | N |
到_set | * | * | * | * | N |
到_values | * | N | |||
到_vec | * | * | * | * | N |
到_deque | * | * | * | * | N |
杂项
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
填充 | * | Y | |||
用... | * | * | * | Y | |
遍历 | * | * | * | * | N |
重复 | * | ||||
单元 | * | * | * | Y |
灵感来自
构建
需求
- Rust 1.80+
设置
cargo install cargo-make
测试
makers build
基准
makers bench
贡献
请随时打开问题或拉取请求,提出问题、想法、功能、改进或修复。
许可证
根据您的选择,受以下许可证之一许可:
- Apache 许可证 2.0 (LICENSE-APACHE或https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT或http://opensource.org/licenses/MIT)
。
Rust标准库集合的实用扩展方法。
允许直接以函数式风格操作集合,而不使用通常的迭代器样板代码。
特性
- 将标准迭代器方法添加到标准库集合中
- 还包括在集合库中常见的一些附加实用方法
- 转换方法返回新的集合实例,而不是返回迭代器
- 所有方法都将集合实例视为不可变,尽管其中一些可能会消耗它们
- 性能接近最优,开销仅限于新集合的创建
示例
use cantrip::*;
let a = vec![1, 2, 3];
a.fold(0, |r, x| r + x); // 6
a.map_ref(|&x| (x, x + 1)).to_map(); // HashMap::from([(1, 2), (2, 3), (3, 4)])
a.flat_map(|x| [x, -x]).sorted(); // vec![-3, -2, -1, 1, 2, 3]
a.filter(|&x| x > 1).into_set(); // HashSet::from([2, 3])
a.group_by(|x| x % 2); // HashMap::from([(0, vec![2]), (1, vec![1, 3])])
a.delete(&1).add(2).unique(); // vec![2, 3]
a.substitute_at(0, 4).to_list(); // LinkedList::from([4, 2, 3])
a.position_multi(|&x| x % 2 == 1); // vec![0, 2]
a.rev().into_iter().into_deque(); // VecDeque::from([3, 2, 1])
方法
搜索
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
find | * | * | * | * | N |
find_map | * | * | * | Y | |
find_map_ref | * | * | * | * | N |
find_position | * | * | N | ||
first | * | * | N | ||
last | * | N | |||
position | * | * | N | ||
position_multi | * | * | N | ||
position_of | * | * | N | ||
position_of_multi | * | * | N | ||
position_sequence | * | * | N | ||
rfind | * | * | N | ||
rposition | * | * | N |
修改
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
add | * | * | * | Y | |
add_at | * | Y | |||
add_at_multi | * | Y | |||
add_multi | * | * | * | Y | |
合并 | * | Y | |||
delete | * | * | * | Y | |
delete_at | * | Y | |||
delete_at_multi | * | Y | |||
delete_multi | * | * | * | Y | |
枚举 | * | Y | |||
映射 | * | * | * | Y | |
映射引用 | * | * | * | N | |
映射键 | * | Y | |||
映射值 | * | Y | |||
映射条件 | * | N | |||
move_at | * | Y | |||
pad_left | * | Y | |||
pad_left_with | * | Y | |||
pad_right | * | Y | |||
pad_right_with | * | Y | |||
rev | * | Y | |||
扫描 | * | Y | |||
扫描引用 | * | N | |||
substitute | * | * | * | Y | |
substitute_at | * | Y | |||
substitute_at_multi | * | Y | |||
substitute_multi | * | * | * | Y | |
swap_at | * | Y |
过滤
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
duplicates | * | Y | |||
duplicates_by | * | Y | |||
filter | * | * | * | Y | |
filter_keys | * | Y | |||
filter_map | * | * | * | Y | |
filter_map_ref | * | * | * | N | |
filter_ref | * | * | * | N | |
filter_values | * | Y | |||
init | * | * | Y | ||
largest | * | * | Y | ||
slice | * | Y | |||
smallest | * | * | Y | ||
skip | * | * | Y | ||
skip_while | * | * | Y | ||
step_by | * | Y | |||
take | * | * | Y | ||
take_while | * | * | Y | ||
独特 | * | Y | |||
按独特性排序 | * | Y | |||
尾部 | * | * | Y |
检查
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
全部 | * | * | * | * | N |
任何 | * | * | * | * | N |
公共前缀长度 | * | * | N | ||
公共后缀长度 | * | * | N | ||
非交集 | * | * | * | * | N |
等价 | * | * | N | ||
intersect | * | * | * | Y | |
子集 | * | * | * | * | N |
超集 | * | * | * | * | N |
聚合
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
按计数 | * | * | * | * | N |
计数唯一 | * | * | * | N | |
折叠 | * | * | * | Y | |
折叠引用 | * | * | * | * | N |
频率 | * | * | N | ||
按频率排序 | * | * | N | ||
分组折叠 | * | * | Y | ||
分组折叠引用 | * | * | * | N | |
分组减少 | * | * | Y | ||
分组减少引用 | * | * | * | N | |
max_by | * | * | * | * | N |
max_by_key | * | * | * | * | N |
max_of | * | * | * | * | N |
min_by | * | * | * | * | N |
min_by_key | * | * | * | * | N |
min_of | * | * | * | * | N |
minmax_by | * | * | * | * | N |
minmax_by_key | * | * | * | * | N |
minmax_of | * | * | * | * | N |
乘积 | * | * | Y | ||
乘积键 | * | Y | |||
乘积值 | * | Y | |||
减少 | * | * | * | Y | |
减少引用 | * | * | * | * | N |
递归折叠 | * | Y | |||
递归折叠引用 | * | * | N | ||
总和 | * | * | Y | ||
总和键 | * | Y | |||
总和值 | * | Y |
选择
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
分块 | * | Y | |||
按分块排序 | * | Y | |||
精确分块 | * | Y | |||
笛卡尔积 | * | N | |||
组合 | * | * | N | ||
多组合 | * | N | |||
幂集 | * | * | N | ||
排列 | * | N | |||
窗口 | * | N | |||
环形窗口 | * | N |
分区
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
分割 | * | Y | |||
按分割排序 | * | Y | |||
按组排序 | * | * | Y | ||
分区 | * | * | * | Y | |
分区映射 | * | * | * | Y | |
分区映射引用 | * | * | * | N | |
解包 | * | Y |
合并
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
扁平映射 | * | * | * | Y | |
扁平映射引用 | * | * | * | N | |
扁平化 | * | * | Y | ||
交错 | * | Y | |||
精确交错 | * | Y | |||
插入 | * | Y | |||
插入... | * | Y | |||
连接 | * | N | |||
合并 | * | Y | |||
按合并排序 | * | Y | |||
连接 | * | Y | |||
填充 | * | Y |
排序
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
排序 | * | Y | |||
按排序排序 | * | Y | |||
按缓存键排序 | * | Y | |||
按键排序 | * | Y | |||
不稳定排序 | * | Y | |||
按排序排序 | * | Y | |||
按键排序 | * | Y |
转换
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
收集 | * | * | * | * | N |
collect_to | * | * | * | * | Y |
into_bmap | * | * | * | Y | |
into_bset | * | * | * | Y | |
into_heap | * | * | * | Y | |
into_list | * | * | * | Y | |
into_map | * | * | * | Y | |
into_set | * | * | * | Y | |
into_vec | * | * | * | * | Y |
into_deque | * | * | * | Y | |
到_bmap | * | * | * | * | N |
到_bset | * | * | * | * | N |
到_heap | * | * | * | * | N |
到_keys | * | N | |||
到_list | * | * | * | * | N |
到_map | * | * | * | * | N |
到_set | * | * | * | * | N |
到_values | * | N | |||
到_vec | * | * | * | * | N |
到_deque | * | * | * | * | N |
杂项
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
填充 | * | Y | |||
用... | * | * | * | Y | |
遍历 | * | * | * | * | N |
重复 | * | ||||
单元 | * | * | * | Y |
灵感来自
构建
需求
- Rust 1.80+
设置
cargo install cargo-make
测试
makers build
基准
makers bench
贡献
请随时打开问题或拉取请求,提出问题、想法、功能、改进或修复。
许可证
根据您的选择,受以下许可证之一许可:
- Apache 许可证 2.0 (LICENSE-APACHE或https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT或http://opensource.org/licenses/MIT)
。
Rust标准库集合的实用扩展方法。
允许直接以函数式风格操作集合,而不使用通常的迭代器样板代码。
特性
- 将标准迭代器方法添加到标准库集合中
- 还包括在集合库中常见的一些附加实用方法
- 转换方法返回新的集合实例,而不是返回迭代器
- 所有方法都将集合实例视为不可变,尽管其中一些可能会消耗它们
- 性能接近最优,开销仅限于新集合的创建
示例
use cantrip::*;
let a = vec![1, 2, 3];
a.fold(0, |r, x| r + x); // 6
a.map_ref(|&x| (x, x + 1)).to_map(); // HashMap::from([(1, 2), (2, 3), (3, 4)])
a.flat_map(|x| [x, -x]).sorted(); // vec![-3, -2, -1, 1, 2, 3]
a.filter(|&x| x > 1).into_set(); // HashSet::from([2, 3])
a.group_by(|x| x % 2); // HashMap::from([(0, vec![2]), (1, vec![1, 3])])
a.delete(&1).add(2).unique(); // vec![2, 3]
a.substitute_at(0, 4).to_list(); // LinkedList::from([4, 2, 3])
a.position_multi(|&x| x % 2 == 1); // vec![0, 2]
a.rev().into_iter().into_deque(); // VecDeque::from([3, 2, 1])
方法
搜索
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
find | * | * | * | * | N |
find_map | * | * | * | Y | |
find_map_ref | * | * | * | * | N |
find_position | * | * | N | ||
first | * | * | N | ||
last | * | N | |||
position | * | * | N | ||
position_multi | * | * | N | ||
position_of | * | * | N | ||
position_of_multi | * | * | N | ||
position_sequence | * | * | N | ||
rfind | * | * | N | ||
rposition | * | * | N |
修改
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
add | * | * | * | Y | |
add_at | * | Y | |||
add_at_multi | * | Y | |||
add_multi | * | * | * | Y | |
合并 | * | Y | |||
delete | * | * | * | Y | |
delete_at | * | Y | |||
delete_at_multi | * | Y | |||
delete_multi | * | * | * | Y | |
枚举 | * | Y | |||
映射 | * | * | * | Y | |
映射引用 | * | * | * | N | |
映射键 | * | Y | |||
映射值 | * | Y | |||
映射条件 | * | N | |||
move_at | * | Y | |||
pad_left | * | Y | |||
pad_left_with | * | Y | |||
pad_right | * | Y | |||
pad_right_with | * | Y | |||
rev | * | Y | |||
扫描 | * | Y | |||
扫描引用 | * | N | |||
substitute | * | * | * | Y | |
substitute_at | * | Y | |||
substitute_at_multi | * | Y | |||
substitute_multi | * | * | * | Y | |
swap_at | * | Y |
过滤
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
duplicates | * | Y | |||
duplicates_by | * | Y | |||
filter | * | * | * | Y | |
filter_keys | * | Y | |||
filter_map | * | * | * | Y | |
filter_map_ref | * | * | * | N | |
filter_ref | * | * | * | N | |
filter_values | * | Y | |||
init | * | * | Y | ||
largest | * | * | Y | ||
slice | * | Y | |||
smallest | * | * | Y | ||
skip | * | * | Y | ||
skip_while | * | * | Y | ||
step_by | * | Y | |||
take | * | * | Y | ||
take_while | * | * | Y | ||
独特 | * | Y | |||
按独特性排序 | * | Y | |||
尾部 | * | * | Y |
检查
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
全部 | * | * | * | * | N |
任何 | * | * | * | * | N |
公共前缀长度 | * | * | N | ||
公共后缀长度 | * | * | N | ||
非交集 | * | * | * | * | N |
等价 | * | * | N | ||
intersect | * | * | * | Y | |
子集 | * | * | * | * | N |
超集 | * | * | * | * | N |
聚合
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
按计数 | * | * | * | * | N |
计数唯一 | * | * | * | N | |
折叠 | * | * | * | Y | |
折叠引用 | * | * | * | * | N |
频率 | * | * | N | ||
按频率排序 | * | * | N | ||
分组折叠 | * | * | Y | ||
分组折叠引用 | * | * | * | N | |
分组减少 | * | * | Y | ||
分组减少引用 | * | * | * | N | |
max_by | * | * | * | * | N |
max_by_key | * | * | * | * | N |
max_of | * | * | * | * | N |
min_by | * | * | * | * | N |
min_by_key | * | * | * | * | N |
min_of | * | * | * | * | N |
minmax_by | * | * | * | * | N |
minmax_by_key | * | * | * | * | N |
minmax_of | * | * | * | * | N |
乘积 | * | * | Y | ||
乘积键 | * | Y | |||
乘积值 | * | Y | |||
减少 | * | * | * | Y | |
减少引用 | * | * | * | * | N |
递归折叠 | * | Y | |||
递归折叠引用 | * | * | N | ||
总和 | * | * | Y | ||
总和键 | * | Y | |||
总和值 | * | Y |
选择
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
分块 | * | Y | |||
按分块排序 | * | Y | |||
精确分块 | * | Y | |||
笛卡尔积 | * | N | |||
组合 | * | * | N | ||
多组合 | * | N | |||
幂集 | * | * | N | ||
排列 | * | N | |||
窗口 | * | N | |||
环形窗口 | * | N |
分区
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
分割 | * | Y | |||
按分割排序 | * | Y | |||
按组排序 | * | * | Y | ||
分区 | * | * | * | Y | |
分区映射 | * | * | * | Y | |
分区映射引用 | * | * | * | N | |
解包 | * | Y |
合并
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
扁平映射 | * | * | * | Y | |
扁平映射引用 | * | * | * | N | |
扁平化 | * | * | Y | ||
交错 | * | Y | |||
精确交错 | * | Y | |||
插入 | * | Y | |||
插入... | * | Y | |||
连接 | * | N | |||
合并 | * | Y | |||
按合并排序 | * | Y | |||
连接 | * | Y | |||
填充 | * | Y |
排序
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
排序 | * | Y | |||
按排序排序 | * | Y | |||
按缓存键排序 | * | Y | |||
按键排序 | * | Y | |||
不稳定排序 | * | Y | |||
按排序排序 | * | Y | |||
按键排序 | * | Y |
转换
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
收集 | * | * | * | * | N |
collect_to | * | * | * | * | Y |
into_bmap | * | * | * | Y | |
into_bset | * | * | * | Y | |
into_heap | * | * | * | Y | |
into_list | * | * | * | Y | |
into_map | * | * | * | Y | |
into_set | * | * | * | Y | |
into_vec | * | * | * | * | Y |
into_deque | * | * | * | Y | |
到_bmap | * | * | * | * | N |
到_bset | * | * | * | * | N |
到_heap | * | * | * | * | N |
到_keys | * | N | |||
到_list | * | * | * | * | N |
到_map | * | * | * | * | N |
到_set | * | * | * | * | N |
到_values | * | N | |||
到_vec | * | * | * | * | N |
到_deque | * | * | * | * | N |
杂项
方法 / 集合类型 | Vec, VecDeque, LinkedList | 切片 | HashSet, BTreeSet, BinaryHeap | HashMap, BTreeMap | 消耗 |
---|---|---|---|---|---|
填充 | * | Y | |||
用... | * | * | * | Y | |
遍历 | * | * | * | * | N |
重复 | * | ||||
单元 | * | * | * | Y |
灵感来自
构建
需求
- Rust 1.80+
设置
cargo install cargo-make
测试
makers build
基准
makers bench
贡献
请随时打开问题或拉取请求,提出问题、想法、功能、改进或修复。
许可证
根据您的选择,受以下许可证之一许可:
- Apache 许可证 2.0 (LICENSE-APACHE或https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT或http://opensource.org/licenses/MIT)
。