#math #vec #data #jobs #lib #permutate #combinate

combination

一个库,用于从向量中执行排列和组合等数学任务

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算法

Download history 431/week @ 2024-03-14 590/week @ 2024-03-21 724/week @ 2024-03-28 703/week @ 2024-04-04 904/week @ 2024-04-11 924/week @ 2024-04-18 1023/week @ 2024-04-25 1052/week @ 2024-05-02 1144/week @ 2024-05-09 1048/week @ 2024-05-16 614/week @ 2024-05-23 859/week @ 2024-05-30 787/week @ 2024-06-06 957/week @ 2024-06-13 1237/week @ 2024-06-20 665/week @ 2024-06-27

3,772 每月下载量
用于 29 个crate(通过 ssi-json-ld

MIT/Apache

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,它们是 CombinePermutate

通过使用它们与 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"]
]

无运行时依赖

功能