8个版本
0.2.2 | 2022年5月7日 |
---|---|
0.2.0 | 2022年4月27日 |
0.1.5 | 2021年1月20日 |
0.1.2 | 2020年4月11日 |
#773 在 算法
3,772 每月下载量
用于 29 个crate(通过 ssi-json-ld)
24KB
420 行
Combination
是什么
combination 是一个库,用于执行从向量中进行排列和组合等数学任务。
示例
extern crate combination;
use combination::*;
#[test]
#[cfg(test)]
fn test_permutation() {
let data = vec![10, 20, 30, 40];
let val = permutate::from_vec(&data);
for item in val {
println!("{:?}", item);
}
}
API
combine
从向量获取组合数据
- 例如
use combination::*;
let val = combine::from_vec(&vec![10, 20, 30, 40], 2);
for item in val {
println!("{:?}", item);
}
- 将会得到
[10, 20]
[10, 30]
[10, 40]
[20, 30]
[20, 40]
[30, 40]
permutate
从向量获取排列数据
- 例如
extern crate combination;
use combination::*;
let val = permutate::from_vec(&vec![10, 20, 30, 40]);
for item in val {
println!("{:?}", item);
}
- 将会得到
[30, 10, 40, 20]
[30, 10, 20, 40]
[40, 10, 30, 20]
[10, 40, 30, 20]
[10, 30, 40, 20]
[10, 30, 20, 40]
[40, 10, 20, 30]
[10, 40, 20, 30]
[10, 20, 40, 30]
[10, 20, 30, 40]
[40, 30, 20, 10]
[30, 40, 20, 10]
[30, 20, 40, 10]
[30, 20, 10, 40]
[40, 20, 30, 10]
[20, 40, 30, 10]
[20, 30, 40, 10]
[20, 30, 10, 40]
[40, 20, 10, 30]
[20, 40, 10, 30]
[20, 10, 40, 30]
[20, 10, 30, 40]
推荐使用 v2 模块
2022年,此包现在使用 edition 2021
并执行更多任务。
在 v2 中,不再需要 Clone
trait。
并且排列现在允许两个参数。
更重要的是,它使用可选值,任何输入都不会发生错误。
无论如何,旧API没有改变,不用担心。
如果你打算使用 v2 模块,只需在 feature 中添加 v2
,它默认会使用。
示例
use combination::v2::\*;
let str_list = ["hi", "i", "am", "roger", "and", "you"];
let combine = Combine::new(6, 4);
let res = str_list.try_select(&combine).unwrap();
for v in res {
println!("{:?}", v);
}
只要使用两个 trait Select 和 Selector,它就会工作。
V2 模块提供了两个结构体,实现了 Selector
trait,它们是 Combine
和 Permutate
通过使用它们与 trait Select
,类型作为 &[T], Vec<T>, [T]
将能够被选择。
Selector
通过实现此 trait,然后使任何类型成为选择器。
然后使用此列表,可以以自定义模式选择列表中的值。
示例
struct CustomSelector;
impl Selector for CustomSelector {
fn select_mode(&self) -> Vec<Vec<usize>> {
vec![vec![0, 0, 0], vec![1, 1, 1], vec![2, 2, 2]]
}
}
fn test_custom_selector() {
let str_list = ["how", "are", "u"];
let custom_selector = CustomSelector;
let res = str_list.try_select(&custom_selector).unwrap();
for v in res {
println!("{:#?}", v);
}
}
它将是
[
["how", "how", "how"],
["are", "are", "are"],
["u", "u", "u"]
]