vector - 如何生成一个范围内的随机数向量?

标签 vector random rust

如何生成 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, ...

将其拆分:

  1. 0..100为 0 到 99 创建一个迭代器
  2. .map在处理迭代器时处理迭代器中的每个项目。
  3. .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);
}

( On the Playground )

您还应该考虑使用 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);
}

( On the Playground )

关于vector - 如何生成一个范围内的随机数向量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48218459/

相关文章:

C 代码的 Rust 版本

c++ - 如何通过引用 O(1) 在 C++ 中复制 vector ?

java - 如何在 java 中创建和显示随机数数组列表?

java - 使用 Java SecureRandom 进行洗牌以实现加密目的?

java - 将随机值存储到数组中

linux - 从 64 位 arch linux 为树莓派 `armv7-unknown-linux-gnueabihf` 编译 Rust 程序

c++ - 删除绑定(bind)到成员函数的 vector<std::function<...>> 的任何元素

c++ - 为 vector 重载 "+,-,*"运算符时出现问题 - "no match for operator..."

r - 基于字符串匹配过滤字符串向量

rust - 我什么时候应该使用 std::thread::Builder 而不是 std::thread::spawn?