编者注:此代码示例来自Rust 1.0之前的版本,在语法上不是有效的Rust 1.0代码。此代码的更新版本会产生不同的错误,但答案仍然包含有价值的信息。
我遇到了下面的例子,说明了如何使用Rust生成一个随机数,但它似乎不起作用。这个例子没有显示它适用于哪个版本的Rust,所以可能它已经过时了,或者可能我搞错了什么。
// http://static.rust-lang.org/doc/master/std/rand/trait.Rng.html
use std::rand;
use std::rand::Rng;
fn main() {
let mut rng = rand::task_rng();
let n: uint = rng.gen_range(0u, 10);
println!("{}", n);
let m: float = rng.gen_range(-40.0, 1.3e5);
println!("{}", m);
}
当我试图编译此文件时,会出现以下错误:
test_rand002.rs:6:17: 6:39 error: type `@mut std::rand::IsaacRng` does not
implement any method in scope named `gen_range`
test_rand002.rs:6 let n: uint = rng.gen_range(0u, 10);
^~~~~~~~~~~~~~~~~~~~~~
test_rand002.rs:8:18: 8:46 error: type `@mut std::rand::IsaacRng` does not
implement any method in scope named `gen_range`
test_rand002.rs:8 let m: float = rng.gen_range(-40.0, 1.3e5);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~
在同一页(上面)上还有另一个例子(如下所示)确实有效。然而,它并不完全符合我的要求,尽管我可以调整它。
use std::rand;
use std::rand::Rng;
fn main() {
let mut rng = rand::task_rng();
let x: uint = rng.gen();
println!("{}", x);
println!("{:?}", rng.gen::<(f64, bool)>());
}
如何使用Rust(例如:i64
)在给定范围内(例如:0到n)生成简单的随机数?
Rng::gen_range
的文档说明:
该功能针对给定范围内仅制作单个样品的情况进行了优化。另请参阅Uniform
分布类型,如果从相同范围重复采样,该类型可能会更快。
Uniform
可用于生成单个值:
use rand::distributions::{Distribution, Uniform}; // 0.6.5
fn main() {
let step = Uniform::new(0, 50);
let mut rng = rand::thread_rng();
let choice = step.sample(&mut rng);
println!("{}", choice);
}
游戏场
或生成值的迭代器:
use rand::distributions::{Distribution, Uniform}; // 0.6.5
fn main() {
let step = Uniform::new(0, 50);
let mut rng = rand::thread_rng();
let choices: Vec<_> = step.sample_iter(&mut rng).take(10).collect();
println!("{:?}", choices);
}
游戏场
编者按:此答案适用于Rust 1.0之前的版本,在Rust 1.0中无效。请参阅Manoel Stilpens的回答。
最近这种情况发生了很大变化(对不起!都是我干的),在Rust 0.8中它被称为gen\u integer\u range
(请注意URL中的/0.8/
而不是/master/
,如果您使用的是0.8,则需要阅读这些文档)。
警告一句:。gen_integer_range
在许多方面完全不正确,新的。gen_range
没有不正确的问题。
主代码(其中.gen_range
工作正常):
use std::rand::{task_rng, Rng};
fn main() {
// a number from [-40.0, 13000.0)
let num: f64 = task_rng().gen_range(-40.0, 1.3e4);
println!("{}", num);
}
这将使用Rng::gen_range
生成0(含)和100(不含)之间的随机数:
use rand::Rng; // 0.8.0
fn main() {
// Generate random number in the range [0, 99]
let num = rand::thread_rng().gen_range(0..100);
println!("{}", num);
}
不要忘记将rand
依赖项添加到Cargo。汤姆:
[dependencies]
rand = "0.8"
问题内容: 我知道如何在Python范围内生成随机数。 我知道我可以将其循环生成n个数量的这些数字 但是,我需要确保该列表中的每个数字都是唯一的。除了大量的条件语句之外,还有一种直接的方法可以生成n个唯一的随机数吗? 重要的是列表中的每个数字都不同。 所以 [12,5,6,1] =好 但 [12,5,5,1] =不好,因为数字5出现两次。 问题答案: 如果您只需要采样而无需更换: random.s
比方说,如果我想在和之间生成一个无偏随机数,我会这样做: 但是,如果我想生成一个介于和之间的随机数,但更偏向于一个介于和之间的值的程度呢?最好用概率曲线来说明:
我还没有找到一个函数来生成给定长度的随机浮点数数组。 我已经看过随机抽样,但似乎没有函数可以满足我的需求。 random.uniform很接近,但它只返回一个元素,而不是一个特定的数字。 这就是我所追求的: 这将返回一个由50个随机非唯一浮点数(即:允许重复)组成的数组,这些浮点数均匀分布在范围内。 有这样的功能吗
返回指定范围内的一个随机数。 使用 Math.random() 生成一个随机值,使用乘法将其映射到所需的范围。 const randomNumberInRange = (min, max) => Math.random() * (max - min) + min; randomNumberInRange(2, 10); // 6.0211363285087005
问题内容: 我需要生成一个范围内的随机唯一数字吗?怎么做 ? 我可以通过生成随机数 我知道这段代码不好,所以我需要一个更好的优化版本代码!帮帮我 ! 例如:如果我需要在1到15之间生成3个数字,它们应该像5、9、1而不是3,1,2 [具有1-3(我要生成的数字)] 问题答案: 以随机顺序排列数字范围的数组: 包装功能: 例: 结果:
问题内容: 我看过很多文章,解释了这个问题,但是他们都使用整数值,老实说,我并没有完全理解它,所以这个问题: 我正在尝试在Java中生成从(-1554900.101)到(52952058699.3098)范围的随机数,我想知道是否有人可以向我解释这一点,因为我真的很想理解它。 我的想法:这是正确的方法吗?1)生成一个在我指定范围内的随机整数2)将生成的数除以pi以得到float / double随