#安全随机 #Wyrand #性能 #rand #简单

无std fastrand

简单快速的随机数生成器

25个稳定版本

新版本 2.1.1 2024年8月23日
2.1.0 2024年4月27日
2.0.2 2024年3月24日
2.0.1 2023年9月25日
1.3.3 2020年7月7日

#2 in 算法

Download history 2355855/week @ 2024-05-04 2475716/week @ 2024-05-11 2459556/week @ 2024-05-18 2458469/week @ 2024-05-25 2653807/week @ 2024-06-01 2549399/week @ 2024-06-08 2497985/week @ 2024-06-15 2527936/week @ 2024-06-22 2380858/week @ 2024-06-29 2567792/week @ 2024-07-06 2564478/week @ 2024-07-13 2680822/week @ 2024-07-20 2640439/week @ 2024-07-27 2601491/week @ 2024-08-03 2688753/week @ 2024-08-10 2296280/week @ 2024-08-17

10,679,006 每月下载量
用于 19,754 个crate(600个直接使用)

Apache-2.0 OR MIT

33KB
587

fastrand

Build License Cargo Documentation

简单快速的随机数生成器。

实现使用了Wyrand,一个简单快速的生成器,但不是密码学安全的。

示例

抛硬币

if fastrand::bool() {
    println!("heads");
} else {
    println!("tails");
}

生成一个随机的

let num = fastrand::i32(..);

在数组中选择一个随机元素

let v = vec![1, 2, 3, 4, 5];
let i = fastrand::usize(..v.len());
let elem = v[i];

使用O(n)复杂度从数组中采样值(n是数组的长度)

fastrand::choose_multiple(vec![1, 4, 5].iter(), 2);
fastrand::choose_multiple(0..20, 12);

洗牌数组

let mut v = vec![1, 2, 3, 4, 5];
fastrand::shuffle(&mut v);

生成随机的VecString

use std::iter::repeat_with;

let v: Vec<i32> = repeat_with(|| fastrand::i32(..)).take(10).collect();
let s: String = repeat_with(fastrand::alphanumeric).take(10).collect();

为了在每次运行中获得可重复的结果,请使用种子初始化生成器

// Pick an arbitrary number as seed.
fastrand::seed(7);

// Now this prints the same number on every run:
println!("{}", fastrand::u32(..));

为了更高效,创建一个新的Rng实例,而不是使用线程局部生成器

use std::iter::repeat_with;

let rng = fastrand::Rng::new();
let mut bytes: Vec<u8> = repeat_with(|| rng.u8(..)).take(10_000).collect();

此crate旨在公开一组有用的随机性原语。对于更专业化的算法,请考虑使用fastrand-contrib crate。

功能

  • std(默认启用):启用std库。这对于全局生成器和全局熵是必需的。没有此功能,Rng只能通过with_seed方法实例化。
  • js:假设WebAssembly目标在JavaScript环境中运行。

许可证

根据您的要求,许可为以下之一

任选其一。

贡献

除非您明确声明,否则根据Apache-2.0许可证定义,您有意提交以包含在作品中的任何贡献,均应双重许可,如上所述,没有任何附加条款或条件。

依赖项

~0–370KB