use rand::Rng;
let mut random = rand::thread_rng();
// 生成[0, 1)范围内的浮点数
println!("[0,1) f32={}", random.gen::<f32>());
// 生成[0,10)内随机整数
println!("[0,10) i32={}", random.gen_range(0,10));
Rust中生成随机数用得比较多的是rand
库,目前最新版本是0.8.5
。
文档直达:rand-0.8.5
0.7.3
版本也是用得比较多的。
添加依赖
在Cargo.toml文件中加入依赖:
[dependencies]
rand = "0.7.3"
gen()和gen_range()
#[test]
fn test_random() {
use rand::Rng;
use rand::prelude::ThreadRng;
let mut random: ThreadRng = rand::thread_rng();
// 生成随机i32值
println!("i32={}", random.gen::<i32>());
// 生成随机u8值
let y: u8 = random.gen();
// 生成指定类型的元组
let point: (f32, f32) = random.gen();
// 生成一个随机数组
let arr: [u8; 5] = random.gen();
// 生成[0,1)范围内随机f32值
println!("[0,1) f32={}", random.gen::<f32>());
// 生成[0,1)范围内随机f64值
println!("[0,1) f64={}", random.gen::<f64>());
// 指定范围[low, high),生成随机数
let x:u8 = random.gen_range(1u8, 100u8);
let y:f64 = random.gen_range(-20f64, 20f64);
}
测试代码2
use rand::Rng;
use rand::prelude::ThreadRng;
use rand::prelude::SliceRandom;
#[test]
fn test_random() {
let mut random: ThreadRng = rand::thread_rng();
// 0.7.x的版本,根据参数low和high生成区间[low,high)内的数
let x0_10: i32 = random.gen_range(0,11);
println!("{x0_10}");
// 0.8.5版本支持,传入一个Range
// println!("{}", random.gen_range(0..=10) as usize);
let x: i32 = random.gen();
println!("{x}");
let y = random.gen::<u8>();
println!("{y}");
// 生成1个1-10的数组
let mut nums: Vec<i32> = (1..=10).collect();
// 传入随机变量,对数组元素顺序打乱重排(洗牌算法)
nums.shuffle(&mut random);
println!("{:?}", nums);
}