淄博网站制作网络丰富,wordpress 新建页面 所有文章,翻墙到国外网站怎么做,吉林省城市建设学校网站文章目录 生成随机值生成随机数生成范围内随机数生成自定义类型随机值从一组字母数字字符创建随机密码从一组用户定义字符创建随机密码 总结 生成随机值
rust中官方并没有像以他语言一样#xff0c;rust并没有官方并没有提供生成随机数的工具#xff0c;所以我们要借助rand包… 文章目录 生成随机值生成随机数生成范围内随机数生成自定义类型随机值从一组字母数字字符创建随机密码从一组用户定义字符创建随机密码 总结 生成随机值
rust中官方并没有像以他语言一样rust并没有官方并没有提供生成随机数的工具所以我们要借助rand包进行生成随机数。这里我们使用现在使用罪为广泛的rand包只需要引入以下依赖就能够使用。rand 0.8.5
生成随机数
在随机数生成器 rand::Rng 的帮助下通过 rand::thread_rng 生成随机数。可以开启多个线程每个线程都有一个初始化的生成器。整数在其类型范围内均匀分布浮点数是从 0 均匀分布到 1但不包括 1。
use rand::Rng;fn main() {let mut rng rand::thread_rng();let n1: u8 rng.gen();let n2: u16 rng.gen();println!(Random u8: {}, n1);println!(Random u16: {}, n2);// 改变类型println!(Random u32: {}, rng.gen::u32());println!(Random i32: {}, rng.gen::i32());println!(Random float: {}, rng.gen::f64());
}结果
Random u8: 247
Random u16: 46458
Random u32: 2649532043
Random i32: 1393744920
Random float: 0.5923489382636902生成范围内随机数
使用 Rng::gen_range在半开放的 [0, 10) 范围内不包括 10生成一个随机值。
use rand::Rng;fn main() {let mut rng rand::thread_rng();println!(Integer: {}, rng.gen_range(0..10));println!(Float: {}, rng.gen_range(0.0..10.0));
}结果 let mut rng rand::thread_rng();println!(Integer: {}, rng.gen_range(0..10));println!(Float: {}, rng.gen_range(0.0..10.0));使用 Uniform 模块可以得到均匀分布的值。下述代码和上述代码具有相同的效果但在相同范围内重复生成数字时下述代码性能可能会更好。 use rand::distributions::{Distribution, Uniform};fn main() {let mut rng rand::thread_rng();let die Uniform::from(1..7);loop {let throw die.sample(mut rng);println!(Roll the die: {}, throw);if throw 6 {break;}}
}结果
Roll the die: 1
Roll the die: 2
Roll the die: 6生成自定义类型随机值
随机生成一个元组 (i32, bool, f64) 和用户定义类型为 Point 的变量。为 Standard 实现 Distribution trait以允许随机生成。
use rand::Rng;
use rand::distributions::{Distribution, Standard};#[derive(Debug)]
struct Point {x: i32,y: i32,
}impl DistributionPoint for Standard {fn sampleR: Rng ?Sized(self, rng: mut R) - Point {let (rand_x, rand_y) rng.gen();Point {x: rand_x,y: rand_y,}}
}fn main() {let mut rng rand::thread_rng();let rand_tuple rng.gen::(i32, bool, f64)();let rand_point: Point rng.gen();println!(Random tuple: {:?}, rand_tuple);println!(Random Point: {:?}, rand_point);
}结果
Random tuple: (590118681, false, 0.7548409339548463)
Random Point: Point { x: 914499268, y: 795986012 }从一组字母数字字符创建随机密码
随机生成一个给定长度的 ASCII 字符串范围为 A-Za-z0-9使用字母数字样本。
use rand::{thread_rng, Rng};
use rand::distributions::Alphanumeric;fn main() {let rand_string: String thread_rng().sample_iter(Alphanumeric).take(30).map(char::from).collect();println!({}, rand_string);
}结果
fwaZUzdIkK1p78fyNvh44Od5gcr3BL从一组用户定义字符创建随机密码
使用用户自定义的字节字符串使用 gen_range 函数随机生成一个给定长度的 ASCII 字符串。
use rand::Rng;
fn main() {const CHARSET: [u8] bABCDEFGHIJKLMNOPQRSTUVWXYZ\abcdefghijklmnopqrstuvwxyz\0123456789)(*^%$#!~;const PASSWORD_LEN: usize 30;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);
}结果
FQNgOrsviJ2tqM$zOSJSR^Hjevvce总结
以上就是rand包的简单使用如果想要更要了解rand包的使用还要多查阅官方文档