#iterator #random #max #min #min-max #set

no-std importunate

从迭代器返回随机元素的方法

2 个版本

0.1.1 2023年2月3日
0.1.0 2023年2月3日

#1828算法

21 每月下载量

MIT 许可证

36KB
609

importunate

github crates.io docs.rs build status

应用和操作小型、常量大小、不同集合的排列。

  • calculate 一个 Permutation 并稍后 apply
  • 获取 element_at_indexindex_of_element
  • combine 两个 Permutation,包括内置的:reverserotate_rightrotate_left
  • invert (撤销) 一个 Permutation
  • 使用 to_le_byte_arraytry_from_le_byte_array 转换以尽可能少的空间存储

no_std 默认。提供 serdearbitrary 功能

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_calculatecalculate_unchecked 都期望传入元素数组和将这些元素映射到 u8 的函数。每个元素应该映射到 u8 的不同值,该值在范围 0..ELEMENTS 内。如果这个条件不满足,try_calculate 将返回 None,而 calculate_unchecked 将引发恐慌或无限循环。 请勿在用户输入上使用

贡献

欢迎贡献!请提交一个拉取请求来修复一个错误,或者 创建一个议题 来讨论新的功能或变更。

在文档的 贡献 部分查看更多信息。

许可

本项目自豪地遵循 MIT 许可协议(LICENSEhttp://opensource.org/licenses/MIT)。

importunate 可以根据 MIT 许可协议进行分发。贡献将接受同样的许可协议。

作者

依赖

~140–400KB