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

Vector 如何生成一个范围内的随机数向量?,vector,random,rust,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到20范围内的100个64位整数值的向量,并允许重复?

这里有几个主要部分是您需要的。首先,如何创建包含100个计算项的向量?最简单的方法是创建一个100的范围并映射到这些项目上。例如,你可以做:

let vals: Vec<u64> = (0..100).map(|v| v + 1000).collect();
// [1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, ...
()

您还应该考虑使用该类型来创建前面的范围,这比调用<代码> GeNyLange多次,然后从中拉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);
}
使用rand::{distributions::Uniform,Rng};//0.6.5
fn main(){
让mut rng=rand::thread_rng();
让范围=均匀::新(0,20);
设vals:Vec=(0..100).map(| | rng.sample(&range)).collect();
println!(“{:?}”,VAL);
}
()

TL;博士:

use rand::{distributions::Uniform, Rng}; // 0.8.0

fn main() {
    let range = Uniform::from(0..20);
    let values: Vec<u64> = rand::thread_rng().sample_iter(&range).take(100).collect();
    println!("{:?}", values);
}
如果您需要一个随机值向量而不限制范围,则可以使用
标准分布:

use rand::{distributions::Standard, Rng}; // 0.8.0

fn main() {
    let values: Vec<u64> = rand::thread_rng().sample_iter(Standard).take(100).collect();
    println!("{:?}", values);
}
使用rand::{distributions::Standard,Rng};//0.8.0
fn main(){
让值为:Vec=rand::thread_rng().sample_iter(标准).take(100).collect();
println!(“{:?}”,值);
}

生成一个并继续/半系列的“泄露秘密”\u number=rand::thread\u rng().gen\u range(1101)?我可以用它做一个闭包,然后把它映射到1..100?是的,差不多。可以是
rng.genu iter::()。take(100)。map(|n | n%20+1)。collect()
仅使用std.@Stargateur,您可能至少会注意到,
%20
gen_range(0,20)
不一样-我真的建议不要在这个级别上“作弊”,即使对于特定的用例可能无关紧要。@Stefan您的意思是什么,我没有作弊,所有范围都是这样实现的。这是非常经典的。@Stargateur只需阅读注释和您刚刚链接的行上方的
accept\u zone
条件,就可以看到差异。
accept\u zone
计算是您应该分配一次并重用它的原因,而不是在循环中调用它。
use rand::Rng; // 0.8.0

fn main() {
    let mut rng = rand::thread_rng();
    let value: u64 = rng.gen_range(0..20);
}
use rand::{distributions::Standard, Rng}; // 0.8.0

fn main() {
    let values: Vec<u64> = rand::thread_rng().sample_iter(Standard).take(100).collect();
    println!("{:?}", values);
}