2 个版本
0.1.1 | 2023年2月3日 |
---|---|
0.1.0 | 2023年2月3日 |
#1828 在 算法
21 每月下载量
36KB
609 行
importunate
应用和操作小型、常量大小、不同集合的排列。
calculate
一个Permutation
并稍后apply
它- 获取
element_at_index
或index_of_element
combine
两个Permutation
,包括内置的:reverse
、rotate_right
和rotate_left
invert
(撤销) 一个Permutation
- 使用
to_le_byte_array
或try_from_le_byte_array
转换以尽可能少的空间存储
no_std
默认。提供 serde
和 arbitrary
功能
crate 的名称是 'permutation' 的字母重组。
此 crate 与 Cargo 一起工作,需要 Cargo.toml
如下
[dependencies]
importunate = "0.1.1"
入门
use importunate::*;
fn main() {
let arr1 = [2,0,1,3];
let mut arr2 = ["zero", "one", "two", "three"];
let perm = Permutation::<u8,4>::calculate_unchecked(&arr1, |&x|x);
perm.apply(arr2);
assert_eq!(arr2,["two","zero", "one", "three"] );
}
Permutation
采取两个泛型参数,Inner
类型(一个无符号整数)和 Elements
的数量。
元素的数量不能超过该内部类型的最大允许值。以下表格显示了每种类型可以容纳多少元素以及所需的最低字节数。
最大元素数 | 字节 | 类型 |
---|---|---|
5 | 1 | u8 |
8 | 2 | u16 |
10 | 3 | u32 |
12 | 4 | |
14 | 5 | u64 |
16 | 6 | |
18 | 7 | |
20 | 8 | |
22 | 9 | u128 |
24 | 10 | |
25 | 11 | |
27 | 12 | |
29 | 13 | |
30 | 14 | |
32 | 15 | |
34 | 16 |
计算排列有三种不同的方法
calculate_incomplete
将为任何实现 Ord
的数组计算排列,但它相对较慢。如果数组包含重复元素,它甚至可以工作,但请记住,描述这种数组的排列将不是唯一的。
try_calculate
和 calculate_unchecked
都期望传入元素数组和将这些元素映射到 u8
的函数。每个元素应该映射到 u8
的不同值,该值在范围 0..ELEMENTS
内。如果这个条件不满足,try_calculate
将返回 None
,而 calculate_unchecked
将引发恐慌或无限循环。 请勿在用户输入上使用
贡献
欢迎贡献!请提交一个拉取请求来修复一个错误,或者 创建一个议题 来讨论新的功能或变更。
在文档的 贡献 部分查看更多信息。
许可
本项目自豪地遵循 MIT 许可协议(LICENSE 或 http://opensource.org/licenses/MIT)。
importunate
可以根据 MIT 许可协议进行分发。贡献将接受同样的许可协议。
作者
依赖
~140–400KB