1. 程式人生 > 其它 >生成指定範圍的隨機數_Rust 生成隨機數,以及在給定範圍內生成隨機數 Rust 實踐指南...

生成指定範圍的隨機數_Rust 生成隨機數,以及在給定範圍內生成隨機數 Rust 實踐指南...

技術標籤:生成指定範圍的隨機數

d39b7b0e9c92c4a625f69f4f3827271f.png

Rust 生態中有一個蠻優秀的 create,用來生成隨機數。名字為 rand,目前版本為 0.7.3,屬於科學計算分類。

rand crate 可以供 Rustacean 生成隨機數、範圍內隨機數、給定分佈隨機數、自定義型別隨機值,以及從一組字母數字字元建立隨機密碼,從一組使用者定義字元建立隨機密碼等。

本文我們從生成隨機數,以及生成範圍內隨機數來入手,對 rand crate 做一個簡單的瞭解。

a686cb714afa8d728db1316c4409b009.png

1、生成隨機數

使用 rand crate 時,在隨機數生成器 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::());    println!("Random i32: {}", rng.gen::());    println!("Random float: {}", rng.gen::());}

2、生成範圍內隨機數

可以使用 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));}

使用 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;        }    }}

以上例項程式碼都是完整的、可獨立執行的程式,因此你可以直接複製它們到自己的專案中進行試驗。

如果希望從頭瞭解如何執行上述例項程式碼,請參考《Rust 實踐指南》中關於本書-如何使用本書例項部分。也可以複製連結:https://books.budshome.com/rust-cookbook/about.html

也可以624cb6a6188ce2715bb6850466966a49.png 點選閱讀原文進行更詳細的學習。