如何生成 1 到 20 范围内的 100 个 64 位整数值的向量,允许重复?
最佳答案
这里有几个主要部分是您需要的。首先,如何创建一个包含 100 个计算项的向量?最简单的方法是创建一个 100 的范围并映射这些项目。例如你可以这样做:
let vals: Vec<u64> = (0..100).map(|v| v + 1000).collect();
// [1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, ...
将其拆分:
-
0..100
为 0 到 99 创建一个迭代器 -
.map
在处理迭代器时处理迭代器中的每个项目。 -
.collect()
获取一个迭代器并将其转换为实现FromIterator
的任何类型在你的例子中是Vec
。
将此扩展为您的随机值,您可以调整 .map
函数以使用 rand
crate 的 gen_range< 生成 0 到 20 之间的随机值
函数创建给定范围内的数值。
use rand::Rng; // 0.6.5
fn main() {
let mut rng = rand::thread_rng();
let vals: Vec<u64> = (0..100).map(|_| rng.gen_range(0, 20)).collect();
println!("{:?}", vals);
}
您还应该考虑使用 rand::distributions::Uniform
键入以预先创建范围,这比多次调用 gen_range
,然后从中提取样本 100 次更有效:
use rand::{distributions::Uniform, Rng}; // 0.6.5
fn main() {
let mut rng = rand::thread_rng();
let range = Uniform::new(0, 20);
let vals: Vec<u64> = (0..100).map(|_| rng.sample(&range)).collect();
println!("{:?}", vals);
}
关于vector - 如何生成一个范围内的随机数向量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48218459/