rust每日一庫 rand 生成隨機數

文章目錄

  • 生成隨機值
    • 生成隨機數
    • 生成范圍內隨機數
    • 生成自定義類型隨機值
    • 從一組字母數字字符創建隨機密碼
    • 從一組用戶定義字符創建隨機密碼
  • 總結

生成隨機值

rust中官方并沒有像以他語言一樣,rust并沒有官方并沒有提供生成隨機數的工具,所以我們要借助rand包進行生成隨機數。這里我們使用現在使用罪為廣泛的rand包只需要引入以下依賴就能夠使用。rand = "0.8.5"

生成隨機數

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

結果

Random u8: 247
Random u16: 46458
Random u32: 2649532043
Random i32: 1393744920
Random float: 0.5923489382636902

生成范圍內隨機數

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

結果

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

結果

Roll the die: 1
Roll the die: 2
Roll the die: 6

生成自定義類型隨機值

隨機生成一個元組 (i32, bool, f64) 和用戶定義類型為 Point 的變量。為 Standard 實現 Distribution trait,以允許隨機生成。

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_tuple = rng.gen::<(i32, bool, f64)>();let rand_point: Point = rng.gen();println!("Random tuple: {:?}", rand_tuple);println!("Random Point: {:?}", rand_point);
}

結果

Random tuple: (590118681, false, 0.7548409339548463)
Random Point: Point { x: 914499268, y: 795986012 }

從一組字母數字字符創建隨機密碼

隨機生成一個給定長度的 ASCII 字符串,范圍為 A-Z,a-z,0-9,使用字母數字樣本。

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

結果

fwaZUzdIkK1p78fyNvh44Od5gcr3BL

從一組用戶定義字符創建隨機密碼

使用用戶自定義的字節字符串,使用 gen_range 函數,隨機生成一個給定長度的 ASCII 字符串。

use rand::Rng;
fn main() {const CHARSET: &[u8] = b"ABCDEFGHIJKLMNOPQRSTUVWXYZ\abcdefghijklmnopqrstuvwxyz\0123456789)(*&^%$#@!~";const PASSWORD_LEN: usize = 30;let mut rng = rand::thread_rng();let password: String = (0..PASSWORD_LEN).map(|_| {let idx = rng.gen_range(0..CHARSET.len());CHARSET[idx] as char}).collect();println!("{:?}", password);
}

結果

"F@QNgOrsviJ2tqM$zOSJSR^Hjevvce"

總結

以上就是rand包的簡單使用,如果想要更要了解rand包的使用,還要多查閱官方文檔

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/163589.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/163589.shtml
英文地址,請注明出處:http://en.pswp.cn/news/163589.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

實現文本選中變色

單個文本變色 <div id"myText">vfadsfgase</div> const myText document.getElementById(myText); myText.addEventListener(mouseup, () > {const selection window.getSelection();if (selection.toString() ! ) {const range selection.getRang…

Could not resolve host: gitlab.example.com問題解決

請按照以下步驟檢查和修復 Hosts 文件&#xff1a; 打開 Hosts 文件&#xff1a;在 Windows 上&#xff0c;Hosts 文件位于 C:\Windows\System32\drivers\etc\hosts&#xff0c;可以使用記事本或其他文本編輯器打開。檢查是否存在正確的映射關系&#xff1a;確保在 Hosts 文件…

深入剖析預約上門服務系統源碼:構建高效服務的代碼之旅

在本文中&#xff0c;我們將深入研究預約上門服務系統的源碼&#xff0c;透過代碼的層層剖析&#xff0c;揭示系統背后的技術奧秘。我們將關注系統的核心功能&#xff0c;并通過代碼示例演示其實現過程&#xff0c;為讀者提供一個深度技術解讀的體驗。 1. 技術棧選擇&#xf…

教育機構拒絕“數據陷阱”,群碩將英孚新一代教學管理系統搬上桌

為什么小機構年年擔心招生不夠&#xff0c;英孚卻令學生家長趨之若鶩&#xff1f; 區別就在教學管理方式。為了更好地管理分布全球的校區、學生和老師&#xff0c;英孚應用了一套教學管理系統&#xff0c;幫助學校管理學員&#xff0c;幫老師智慧排課&#xff0c;幫助家長記錄…

Spring框架學習 -- 讀取和存儲Bean對象

目錄 &#x1f680;&#x1f680; 回顧 getBean()方法的使用 根據name來獲取對象 再談getBean() (1) 配置掃描路徑 (2) 添加注解 ① spring注解簡介 ② 對類注解的使用 ③ 注解Bean對象的命名問題 ④ 方法加Bean注解 (3) Bean 注解的重命名 (4) 獲取Bean對象 -- …

基于YOLO模型建筑工地個人防護設備目標檢測

使用安全裝備可以保護他們免受建筑工地的意外事故。據統計&#xff0c;每年有數以萬計的工人在建筑工地受到嚴重傷害&#xff0c;造成終生困難。然而&#xff0c;通過自我監控來確保工人穿戴個人防護裝備非常重要。在這方面&#xff0c;需要一個準確和快速的系統來檢測工人是否…

微信小程序其他環境都能顯示在正式環境顯示不出來

踩坑日記 用了uni.getImageInfo 用了uni.getImageInfo 本地開發環境&#xff0c;測試環境全都可以&#xff0c;就是更新到正式環境不顯示。后面看代碼百度了這個api發現圖片所涉及的地址需要在小程序配置download域名白名單 https://uniapp.dcloud.net.cn/api/media/image.ht…

termios.h 頭文件包含問題

報奇怪的錯誤&#xff0c;解決掉其他錯誤或告警信息后&#xff0c;調整頭文件的順序。

地埋式積水監測儀廠家批發,實時監測路面積水

地埋式積水監測儀是針對城市內澇推出的積水信息監測采集設備&#xff0c;采用超聲波傳感技術和超聲波抗干擾功能&#xff0c;對路面的積水進行實時精準的監測。該設備能夠在零下-5℃至高溫70℃的嚴寒酷暑環境下可靠運行。它對城市道路積水進行實時監測并上報到監測系統之中&…

opencv-python的圖像分割算法

OpenCV-Python中提供了一些圖像分割算法&#xff0c;常用的有以下幾種&#xff1a; 1.基于閾值的分割&#xff1a; cv2.threshold()&#xff1a;根據設定的閾值將圖像分為兩個類別。cv2.adaptiveThreshold()&#xff1a;根據圖像局部區域的像素值進行自適應閾值分割。 2.基于…

線上問題排查實例分析|關于 Redis 內存泄漏

Redis 作為高性能的 key-value 內存型數據庫&#xff0c;普遍使用在對性能要求較高的系統中&#xff0c;同時也是滴滴內部的內存使用大戶。本文從 KV 團隊對線上 Redis 內存泄漏定位的時間線維度&#xff0c;簡要介紹 Linux 上內存泄漏的問題定位思路和工具。 16:30 問題暴露 業…

電動機保護方式

3.3.1、電動機溫度保護 溫度保護是利用安裝在電動機內部的溫度繼電器或變換器來實現的。當電動機達到一定溫度時繼電器動作&#xff0c;通過控制電路斷開電動機的主電路。對于單相小容量電動機&#xff0c;可以用繼電器直接斷開動力電路。 根據溫度傳感器的不同可以分為&…

cv2.threshold()函數參數講解

cv2.threshold()函數用于對圖像進行閾值化處理。它的參數如下&#xff1a; src&#xff1a;要處理的輸入圖像&#xff0c;可以是灰度圖像或彩色圖像&#xff0c;類型為uint8。thresh&#xff1a;設定的閾值&#xff0c;如果像素值大于閾值&#xff0c;則將其設為maxval&#x…

【Proteus仿真】【51單片機】籃球比賽計分器

文章目錄 一、功能簡介二、軟件設計三、實驗現象聯系作者 一、功能簡介 本項目使用Proteus8仿真51單片機控制器&#xff0c;使用聲光報警模塊、動態數碼管模塊、按鍵模塊等。 主要功能&#xff1a; 系統運行后&#xff0c;數碼管顯示比賽時間和AB隊得分&#xff1b;系統還未開…

數據中心運維管理:從人工到智能需要走幾步?

一切的變化來自于數據中心規模、復雜度、設備多樣性的挑戰&#xff0c;將運維平臺的重要性推向歷史高點。 此外&#xff0c;基于業務連續性方面的考慮&#xff0c;分布式數據中心成為越來越多客戶的選擇。 一、數據中心面臨的挑戰 運維管理分散&#xff0c;缺乏統一的管理 I…

Win11和NewBing瀏覽器100%開啟Copilot的方法

嚴格按以下步驟來&#xff0c;100%開啟免費的AI&#xff1a; 1.系統升級到Win11最新版&#xff08;不要用家庭版&#xff0c;推薦專業版&#xff09; 升級完成之后的系統信息&#xff08;時間截至2023.11.22&#xff09; 版本號&#xff1a;23H2 操作系統版本&#xff1a;226…

MySQL數據庫_01

Web后端開發_02 數據庫介紹 什么是數據庫&#xff1f; 數據庫&#xff1a;DataBase&#xff08;DB&#xff09;&#xff0c;是存儲和管理數據的倉庫 數據庫管理系統&#xff1a;DataBase Management System (DBMS)&#xff0c;操縱和管理數據庫的大型軟件。SQL&#xff1a;St…

自定義注解+AOP

自定義注解與AOP&#xff08;面向切面編程&#xff09;的結合常常用于在應用程序中劃定切面&#xff0c;以便在特定的方法或類上應用橫切關注點。以下是一個簡單的示例&#xff0c;演示了如何創建自定義注解&#xff0c;并使用Spring AOP來在被注解的方法上應用通知。 如何創建…

java學習part08權限

1.權限表格 外部類都是公有和缺省&#xff0c;因為其他兩種對于外部類沒有意義 一些內部成分都各種權限都可以 2.如何體現java封裝性 答&#xff0c;通過權限控制&#xff0c;保證哪些可以給人看到&#xff0c;哪些不能

手持式無線通信頻譜分析儀 MS2713E

MS2713E 手持式無線通信頻譜分析儀 安立手持式無線通信頻譜分析儀 MS2713E 旨在處理最惡劣的現場條件&#xff0c;使您能夠監控、定位、識別和分析各種蜂窩、2G/3G/4G、陸地移動無線電、Wi-Fi 和廣播信號。多功能 Spectrum Master 在定位和識別寬頻率范圍內的信號時&#xff0…