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包的使用,还要多查阅官方文档
相关文章:
rust每日一库 rand 生成随机数
文章目录 生成随机值生成随机数生成范围内随机数生成自定义类型随机值从一组字母数字字符创建随机密码从一组用户定义字符创建随机密码 总结 生成随机值 rust中官方并没有像以他语言一样,rust并没有官方并没有提供生成随机数的工具,所以我们要借助rand包…...

Unity SRP 管线【第三讲:URP 光照】
3.2.3 以前属于Shader部分,Shader部分不进行讲解。 这里只涉及Unity内部管线的设置问题。 文章目录 3.2.3 向GPU发送灯光数据设置光源数据设置主光源设置额外点光源 Shader中的数据 3.2.3 向GPU发送灯光数据 在UniversalRenderPipeline.cs > RenderSingleCamera…...

怎么更新BI报表数据?问我就对了
BI大数据分析工具上有大量的BI报表模板,这些模板都是一个个完整的BI报表,只需将数据源更换,立即就能用来分析我们自己的数据。那,BI报表的数据怎么更新?接下来就来说说这事。 目的:更新BI报表数据 工具&a…...

SpringBoot 入门学习
开发环境配置 JDK 1.8、Maven 3.8.8、 IDEA CE 2023.2 框架介绍 Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化 Spring 应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置…...

高等数学零基础篇复习笔记
预备章 零基础高等数学入门知识 第一节 集合、运算与关系 第二节 三角函数与反三角函数 三角函数的公式 反三角函数 第三节 常见不等式及数列 划重点 第一章 函数、极限与连续 第一节 函数及函数的初等特性 特殊函数 反函数 函数的初等特性 ①有界性 ②奇偶性 偶函数图像…...

CentOS 系列:CentOS 7文件系统的组成
CentOS 7文件系统的组成 文件系统的组成Linux的一些重要目录文件和目录名主机名文件权限绝对路径和相对路径绝对路径相对路径 文件系统的组成 一切从根开始 文件路径中只有第一个/是根目录,后面的/是分隔符 文件名区分大小写 除斜线(/)以外,其他的字符…...
String转Date,Date转String
源码: Date currentTime new Date();System.out.println("currentTime:"currentTime);SimpleDateFormat formatter new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String dateString formatter.format(currentTime);System.out.println(&quo…...

大坝安全监测的内容及作用
大坝安全监测是指对大坝水雨情沉降、倾斜、渗压以及大坝形状特征有效地进行监测,及时发现潜在的安全隐患和异常情况,以便大坝管理人员能够做出科学决策,以确保大坝安全稳定运行。 大坝安全监测的主要内容 1.表面位移监测:监测大坝…...
Maven——Maven发展历程
本帖主要介绍以下内容: 什么是Maven为什么需要MavenMaven与极限编程 1、什么是Maven Maven这个词可以翻译为“知识的积累”,也可以翻译为“专家”或“内行”。Maven是跨平台的项目管理工具。作为Apache组织中的一个颇为成功的开源项目,Mav…...
Python与设计模式--迭代器模式
23种计模式之 前言 (5)单例模式、工厂模式、简单工厂模式、抽象工厂模式、建造者模式、原型模式、(7)代理模式、装饰器模式、适配器模式、门面模式、组合模式、享元模式、桥梁模式、(11)策略模式、责任链模式、命令模式、中介者模…...
【NGINX--8】HTTP/2
1、基本配置 想要利用 HTTP/2。 在 NGINX 服务器上启用 HTTP/2: server {listen 443 ssl http2 default_server;ssl_certificate server.crt; ssl_certificate_key server.key;# ... }详解 要启用 HTTP/2,您只需要将 http2 参数添加到 listen 指令即可…...

webpack项目工程初始化
一、初始化项目 默认系统已经安装node //初始化 pnpm init//安装webpack pnpm i -D webpack webpack-cli 新建一个index.html的入口文件 新建一个src文件存放js代码,src里面新建一个index.js package.josn配置打包命令 {"name": "webpack-cs&q…...

08-学成在线项目中统一异常处理的规范
项目中的异常处理 规范异常类型 在Service类的业务方法中有很多的参数合法性校验,当请求参数不合法的时候会抛出异常,但此时异常信息只会在控制台输出,前端界面并不会提示用户 实际开发中前端和后端需要做一些约定: 一般将错误提示信息统一以json格式返回给前端,以HTTP状态码…...

解析生效探测方法
linux dig命令 1.最常用的查询命令 dig baidu.com2 . 根据记录类型进行查询,比如MX,CNAME,NS,PTR等,只需将类型加在命令后面即可。 dig a.shifen.com ns3 . 指定域名DNS服务器测试解析是否生效的命令,以…...
【科技素养】蓝桥杯STEMA 科技素养组模拟练习试卷11
单选题 1、在阅读文章和接受信息时注意区分事实和观点十分重要。事实(或称为命题)不同于观点的一个主要特征是 A、可以被证实或证伪 B、是准确无误的 C、是正式的表达 D、表达了个人看法 答案:A 2、现代意义的知识产权是在多数国家都受…...

视频集中存储/磁盘阵列EasyCVR平台黑名单异常解决步骤是什么?
视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同,支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。音视频流媒体视频平台EasyCVR拓展性强,视频能力丰富,具体可实现视频监控直播、视频轮播、视频录像、…...

Spring Boot + MyBatis-Plus实现数据库读写分离
文章目录 1. 引言2. MyBatis-Plus简介3. 准备工作4. 配置数据源5. 配置MyBatis-Plus6. 创建实体类和Mapper接口7. 编写Service8. 控制器层9. 测试10. 数据库读写分离的原理11. 拓展11.1. 动态数据源11.2. 多数据源事务管理11.3. 多租户支持 12. 总结 🎉Spring Boot …...
数据同步异常处理,数据同步重试机制(Java)
一、应用场景 在数据同步时,偶尔会出现代码异常之外的问题。例如网络异常、服务器断电… 如果在以上异常片段中,原始数据库新增了一批数据,同步数据库则会丢失这部分数据 二、实现思路 为了解决以上问题,保证原始数据库操作的每…...

STM32F407-14.3.5-01捕获_比较通道
捕获/比较通道 每一个捕获/比较通道都是围绕着一个捕获/比较寄存器(包含影子寄存器) 包括: 捕获的输入部分(数字滤波、多路复用和预分频器), 输出部分(比较器和输出控制)。 中文参考手册中框图分成了三大模块, 把框图合并成了一个整体,以便更好的理解捕获输…...

【Python 训练营】N_12 打印菱形图案
题目 打印菱形图案 分析 先把图形分成两部分来看待,前四行一个规律,后三行一个规律,利用双重for循环,第一层控制行,第二层控制列。 答案 # 方法一 for i in range(4):block **(2*i1)print({:^7}.format(block))…...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...
<6>-MySQL表的增删查改
目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表…...
Linux简单的操作
ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...
spring:实例工厂方法获取bean
spring处理使用静态工厂方法获取bean实例,也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下: 定义实例工厂类(Java代码),定义实例工厂(xml),定义调用实例工厂ÿ…...
VTK如何让部分单位不可见
最近遇到一个需求,需要让一个vtkDataSet中的部分单元不可见,查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行,是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示,主要是最后一个参数,透明度…...
大模型多显卡多服务器并行计算方法与实践指南
一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

C++ 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
【HTTP三个基础问题】
面试官您好!HTTP是超文本传输协议,是互联网上客户端和服务器之间传输超文本数据(比如文字、图片、音频、视频等)的核心协议,当前互联网应用最广泛的版本是HTTP1.1,它基于经典的C/S模型,也就是客…...

【Oracle】分区表
个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...
C++.OpenGL (14/64)多光源(Multiple Lights)
多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...