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 算法
10,679,006 每月下载量
用于 19,754 个crate(600个直接使用)
33KB
587 行
fastrand
简单快速的随机数生成器。
实现使用了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);
生成随机的Vec或String
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 (LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
贡献
除非您明确声明,否则根据Apache-2.0许可证定义,您有意提交以包含在作品中的任何贡献,均应双重许可,如上所述,没有任何附加条款或条件。
依赖项
~0–370KB