use rand::Rng;
use rand_distr::{Alphanumeric, Distribution, Normal, NormalError, Standard, Uniform};
fn main() -> Result<(), NormalError> {
let mut rng=rand::thread_rng();
let n1:u8=rng.gen();
let n2:u16=rng.gen();
println!("u8---->{}",n1);
println!("u16----->{}",n2);
println!("i32----->{}",rng.gen::<i32>());
println!("range--->{}",rng.gen_range(1..10));
let die=Uniform::from(1..7);//均匀分布
loop {
let throw=die.sample(&mut rng);
println!("start----->{}",throw);
if throw==3 {
break;
}
}
let normal=Normal::new(2.0,9.0)?;//正态分布
let v=normal.sample(&mut rng);
println!(" 正态分布: {}", v);
let rand_tuple=rng.gen::<(i32,bool,f64)>();
let rand_point=rng.gen::<Point>();//自定义随机值
println!(" 随机值元组: {:?}", rand_tuple);
println!(" 随机值结构体: {:?}", rand_point);
let chars:String=rng.sample_iter(Alphanumeric).map(char::from).take(7).collect();//随机字符串
println!(" 随机字符串: {}", chars);
let mut rng = rand::thread_rng();
let password:String= (0..PASSWORD_LEN).map(|_|{
let idx=rng.gen_range(0..CHARSET.len());
CHARSET[idx] as char
}).collect();
println!(" 随机密码: {:?}", password);
Ok(())
}
#[derive(Debug)]
struct Point{
x:i32,
y:i32,
}
impl Distribution<Point> for Standard{
fn sample<R: Rng + ?Sized>(&self, rng: &mut R) -> Point {
let (rand_x,rand_y)=rng.gen();
Point{
x: rand_x,
y: rand_y,
}
}
}
const CHARSET: &[u8] = b"abcdefghijklmnopqrstuvwxyz\
0123456789)(*&^%$#@!~";
const PASSWORD_LEN: usize = 30;
随机生成值
最新推荐文章于 2024-02-28 11:23:59 发布