• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

Rust rang随机数生成字符串和结构体

武飞扬头像
我像是一条咸鱼
帮助1

使用随机板条箱 [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
系列文章
更多 icon
同类精品
更多 icon
继续加载