最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Rust生成隨機(jī)數(shù)的項目實(shí)踐

 更新時間:2024年03月14日 10:58:57   作者:IAKSH  
Rust標(biāo)準(zhǔn)庫中并沒有隨機(jī)數(shù)生成器,常見的解決方案是使用rand包,本文主要介紹了Rust生成隨機(jī)數(shù)的項目實(shí)踐,具有一定的參考價值,感興趣的可以了解一下

Rust標(biāo)準(zhǔn)庫中并沒有隨機(jī)數(shù)生成器,想要實(shí)現(xiàn)此類功能,你需要自行設(shè)計(純Rust或FFI到C),或者使用第三方包。
一個常見的解決方案是使用rand包,該項目基于Apache-2.0 和 MIT協(xié)議開源,且擁有完備的文檔:
rust-random/rand: A Rust library for random number generation. (github.com)

0x00 | 在Cargo中導(dǎo)入

Cargo.toml[dependencies]下加入以下內(nèi)容即可:

rand = "*"

整個文件看起來會象是這樣:

[package]
name = "hello_world"
version = "0.1.0"
edition = "2021"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
rand = "*"

0x01 | 生成隨機(jī)數(shù)

rand包提供了rand::Rng以生成隨機(jī)數(shù),這是一個隨機(jī)數(shù)生成器,它的使用是這樣的:

use rand::Rng;

fn main() {
	let mut rng = rand::thread_rng();
	let i: i32 = rng.gen();
	let f: f32 = rng.gen();
	println!("i={},f={}",i,f);
	println!("random u8: {}",rng.gen::<u8>());
	println!("random u32: {}",rng.gen::<u32>());
}

0x02 | 給定范圍生成隨機(jī)數(shù)

Rng::gen_range函數(shù)能夠在一個左閉又開的區(qū)間內(nèi)生成隨機(jī)值:

use rand::Rng;

fn main() {
	let mut rng = rand::thread_rng();
	println!("random integer: {}",rng.gen_range(0..10)); // 在[0,10)內(nèi)生成隨機(jī)整數(shù)
	println!("random float: {}",rng.gen_range(0.0..10.0)); // 在[0,10)內(nèi)生成隨機(jī)浮點(diǎn)數(shù)
}

Rng::gen_range函數(shù)使用方便,但當(dāng)在相同范圍內(nèi)連續(xù)生成隨機(jī)數(shù)時,其效果可能不盡人意。使用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!("Rool the die: {}",throw);
		if throw == 6 {
			break;
		}
	}
}

rand_distr是另一個包,它提供了基于rand包的數(shù)種分布模型,你可以在rand_distr - Rust (docs.rs)中找到相關(guān)信息。
以下是生成一個符合正態(tài)分布的隨機(jī)數(shù)的實(shí)列:

use rand_distr::{Distribution, Normal, NormalError};
use rand::thread_rng;
  
fn main() -> Result<(), NormalError> {
    let mut rng = thread_rng();
    let normal = Normal::new(2.0,3.0)?;
    let v = normal.sample(&mut rng);
    println!("spawn random num {} from N(2,6)",v);
    Ok(())
}

0x03 | 給定類型生成隨機(jī)值

rand包可以直接生成一個隨機(jī)數(shù)元組:

use rand::Rng;

fn main() {
	let mut rng = rand::thread_rng();
	let rand_tuple = rng.gen::<(i32,bool,f64)>();
	println!("Random tuple: {:?}",rand_tuple);
}

不過這種方法并不能指定隨機(jī)數(shù)的范圍,如果你真的需要限制其范圍,可能需要手動生成每一個值。比如:

use rand::Rng;

fn main() {
    let mut rng = rand::thread_rng();
    let rand_tuple = (
        rng.gen_range(0..100),
        rng.gen::<bool>(),
        rng.gen_range(0.0..1.0)
    );
    println!("Random tuple: {:?}", rand_tuple);
}

rand包也允許你通過為Standard類實(shí)現(xiàn)Distribution特性以將隨機(jī)數(shù)生成器集成到你的類中,如下:

use rand::Rng;
use rand::distributions::{Distribution, Standard};

#[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_point: Point = rng.gen();
	println!("Random Point: {:?}",rand_point);
}

通過修改sample函數(shù)可以進(jìn)一步指定范圍和分布模型。

0x04 | 生成隨機(jī)字符串

rand包可以生成一個指定長度的隨機(jī)ASCII字符串,其樣本為A-Z,a-z,0-9。
一個生成包含30個ASCII字符的隨機(jī)字符串的例子如下:

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);
}

當(dāng)然,也可以從指定的字符集中生成隨機(jī)字符串:

use rand::Rng;

fn main() {
    const CHARSET: &[u8] = b"123ABC?!";
    let mut rng = rand::thread_rng();
    let password: String = (0..30)
        .map(|_| {
            let idx = rng.gen_range(0..CHARSET.len());
            CHARSET[idx] as char
        })
        .collect();
        
    println!("{:?}", password);
}

參考:
生成隨機(jī)值 - Rust Cookbook 中文版 (rustwiki.org)

到此這篇關(guān)于Rust生成隨機(jī)數(shù)的項目實(shí)踐的文章就介紹到這了,更多相關(guān)Rust生成隨機(jī)數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • libbpf和Rust開發(fā)ebpf程序?qū)崙?zhàn)示例

    libbpf和Rust開發(fā)ebpf程序?qū)崙?zhàn)示例

    這篇文章主要為大家介紹了libbpf和Rust開發(fā)ebpf程序?qū)崙?zhàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • 基于Rust構(gòu)建一個Git提交歷史可視化工具

    基于Rust構(gòu)建一個Git提交歷史可視化工具

    在軟件開發(fā)中,版本控制系統(tǒng)的歷史記錄往往承載著項目的演進(jìn)脈絡(luò),本文主要介紹了如何基于Rust構(gòu)建一個Git提交歷史可視化工具,感興趣的小伙伴可以了解下
    2025-11-11
  • 詳解在Rust語言中如何聲明可變的static類型變量

    詳解在Rust語言中如何聲明可變的static類型變量

    在Rust中,可以使用lazy_static宏來聲明可變的靜態(tài)變量,lazy_static是一個用于聲明延遲求值靜態(tài)變量的宏,本文將通過一個簡單的例子,演示如何使用?lazy_static?宏來聲明一個可變的靜態(tài)變量,需要的朋友可以參考下
    2023-08-08
  • rust交叉編譯問題及報錯解析

    rust交叉編譯問題及報錯解析

    這篇文章主要為大家介紹了rust交叉編譯問題及報錯解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • Rust遍歷 BinaryHeap的示例代碼

    Rust遍歷 BinaryHeap的示例代碼

    Rust 的 BinaryHeap 結(jié)構(gòu)體實(shí)現(xiàn)了迭代器接口,因此你可以遍歷它,如果你想要遍歷 BinaryHeap 中的所有元素,你可以使用 .into_iter() 方法將其轉(zhuǎn)換為迭代器,并遍歷其中的元素,本文通過實(shí)例介紹Rust遍歷 BinaryHeap的相關(guān)知識,感興趣的朋友一起看看吧
    2024-04-04
  • Rust動態(tài)數(shù)組Vec基本概念及用法

    Rust動態(tài)數(shù)組Vec基本概念及用法

    Rust中的Vec是一種動態(tài)數(shù)組,它可以在運(yùn)行時自動調(diào)整大小,本文主要介紹了Rust動態(tài)數(shù)組Vec基本概念及用法,具有一定的參考價值,感興趣的可以了解一下
    2023-12-12
  • Rust如何使用Sauron實(shí)現(xiàn)Web界面交互

    Rust如何使用Sauron實(shí)現(xiàn)Web界面交互

    Sauron?是一個多功能的?Web?框架和庫,用于構(gòu)建客戶端和/或服務(wù)器端?Web?應(yīng)用程序,重點(diǎn)關(guān)注人體工程學(xué)、簡單性和優(yōu)雅性,這篇文章主要介紹了Rust使用Sauron實(shí)現(xiàn)Web界面交互,需要的朋友可以參考下
    2024-03-03
  • Rust中的panic定義及觸發(fā)條件詳解

    Rust中的panic定義及觸發(fā)條件詳解

    這篇文章主要為大家介紹了Rust中的panic定義及觸發(fā)條件詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • Rust?use關(guān)鍵字妙用及模塊內(nèi)容拆分方法

    Rust?use關(guān)鍵字妙用及模塊內(nèi)容拆分方法

    這篇文章主要介紹了Rust?use關(guān)鍵字妙用|模塊內(nèi)容拆分,文中還給大家介紹use關(guān)鍵字的習(xí)慣用法,快速引用自定義模塊內(nèi)容或標(biāo)準(zhǔn)庫,以此優(yōu)化代碼書寫,需要的朋友可以參考下
    2022-09-09
  • 探索Rust切片與Go有何區(qū)別

    探索Rust切片與Go有何區(qū)別

    這篇文章主要為大家介紹了Rust切片與Go的區(qū)別探索,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01

最新評論

西乌珠穆沁旗| 闽清县| 镇安县| 马龙县| 芦溪县| 监利县| 永年县| 祁门县| 竹溪县| 天峨县| 蒲江县| 石泉县| 韩城市| 米泉市| 高淳县| 集安市| 乌审旗| 达尔| 康马县| 连山| 丹寨县| 米易县| 潜山县| 兰西县| 沙田区| 西宁市| 库车县| 崇阳县| 依兰县| 阜阳市| 中宁县| 天门市| 河曲县| 思茅市| 秭归县| 西丰县| 改则县| 海宁市| 会泽县| 冀州市| 商南县|