22个稳定版本
1.2.16 | 2022年11月4日 |
---|---|
1.2.15 | 2022年3月18日 |
1.2.14 | 2021年4月22日 |
1.2.13 | 2020年7月29日 |
1.2.3 | 2018年11月14日 |
#338 in 算法
25,527 每月下载量
在 26 个crate中使用 (2 直接使用)
11KB
136 行
随机选择
根据给定的权重从切片中随机选择一个元素。
示例
enum Prize {
Legendary,
Rare,
Enchanted,
Common,
}
let prize_list = [Prize::Legendary, Prize::Rare, Prize::Enchanted, Prize::Common]; // available prizes
let slice = &prize_list;
let weights = [1, 5, 15, 30]; // a scale of chance of picking each kind of prize
let n = 1000000;
let mut counter = [0usize; 4];
for _ in 0..n {
let picked_item = random_pick::pick_from_slice(slice, &weights).unwrap();
match picked_item {
Prize::Legendary=>{
counter[0] += 1;
}
Prize::Rare=>{
counter[1] += 1;
}
Prize::Enchanted=>{
counter[2] += 1;
}
Prize::Common=>{
counter[3] += 1;
}
}
}
println!("{}", counter[0]); // Should be close to 20000
println!("{}", counter[1]); // Should be close to 100000
println!("{}", counter[2]); // Should be close to 300000
println!("{}", counter[3]); // Should be close to 600000
切片的长度通常是权重长度的整数倍(大于零)。
如果您有多个切片,您不需要使用额外的空间来连接它们,只需使用 pick_from_multiple_slices
函数,而不是 pick_from_slice
。
除了从切片或多个切片中选择单个元素之外,您还可以使用 pick_multiple_from_slice
和 pick_multiple_from_multiple_slices
函数。它们的开销低于具有额外循环的非多选函数。
Crates.io
https://crates.io/crates/random-pick
文档
许可证
依赖关系
~0.5–1MB
~22K SLoC