生成指定範圍的隨機數_Rust 生成隨機數,以及在給定範圍內生成隨機數 Rust 實踐指南...
阿新 • • 發佈:2021-01-24
技術標籤:生成指定範圍的隨機數
Rust 生態中有一個蠻優秀的 create,用來生成隨機數。名字為 rand,目前版本為 0.7.3,屬於科學計算分類。
rand crate 可以供 Rustacean 生成隨機數、範圍內隨機數、給定分佈隨機數、自定義型別隨機值,以及從一組字母數字字元建立隨機密碼,從一組使用者定義字元建立隨機密碼等。
本文我們從生成隨機數,以及生成範圍內隨機數來入手,對 rand crate 做一個簡單的瞭解。
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
也可以 點選閱讀原文進行更詳細的學習。