Rust rang随机数生成字符串和结构体
使用随机板条箱 [dependencies] rand = "0.8.4"
,利用rand生成随机字符串或者字符
let mut rng = rand::thread_rng();
let s: String = Alphanumeric
.sample_iter(&mut rng)
.take(7)
.map(char::from)
.collect::<String>()
.to_uppercase();
println!("{s}");
或者
use rand::Rng;
let s: String = rand::thread_rng()
.sample_iter(&rand::distributions::Alphanumeric)
.take(10)
.map(char::from)
.collect::<String>();
println!("{s}");
除了上面的功能还能实现向结构体或者元组转化,下面是Standard
官方说明
Assuming the provided Rng is well-behaved, these implementations generate values with the following ranges and distributions:
Integers (i32, u32, isize, usize, etc.): Uniformly distributed over all values of the type.
char: Uniformly distributed over all Unicode scalar values, i.e. all code points in the range 0…0x10_FFFF, except for the range 0xD800…0xDFFF (the surrogate code points). This includes unassigned/reserved code points.
bool: Generates false or true, each with probability 0.5.
Floating point types (f32 and f64): Uniformly distributed in the half-open range [0, 1). See notes below.
Wrapping integers (Wrapping), besides the type identical to their normal integer variants.
The Standard distribution also supports generation of the following compound types where all component types are supported:
Tuples (up to 12 elements): each element is generated sequentially.
Arrays (up to 32 elements): each element is generated sequentially; see also Rng::fill which supports arbitrary array length for integer types and tends to be faster for u32 and smaller types. When using rustc ≥ 1.51, enable the min_const_gen feature to support arrays larger than 32 elements. Note that Rng::fill and Standard’s array support are not equivalent: the former is optimised for integer types (using fewer RNG calls for element types smaller than the RNG word size), while the latter supports any element type supported by Standard.
Option first generates a bool, and if true generates and returns Some(value) where value: T, otherwise returning None
元组和数组都做了限制,我们利用Standard
来生成一个结构体看看
use rand::Rng;
use rand::distributions::{Distribution, Standard};
#[allow(dead_code)]
#[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,
}
}
}
fn main() {
let mut rng = rand::thread_rng();
let rand_tuple = rng.gen::<(u32,bool,f64)>();
let rand_point: Point = rng.gen();
println!("Random tuple: {rand_tuple:?}");
println!("Randdom Point: {rand_point:?}");
}
输出:
Random tuple: (638821994, true, 0.871651610454623)
Randdom Point: Point { x: 1113437538, y: 862171486 }
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgkjcig
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13