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 }
这篇博客介绍了如何在Rust中使用rand库生成随机字符串、字符,并探讨了其在生成结构体和复合类型如元组、数组中的应用。通过示例展示了生成随机整数、浮点数、布尔值和Unicode字符的分布特性,同时讨论了生成Option和特定长度数组的策略。
3774

被折叠的 条评论
为什么被折叠?



