rust每日一库 rand 生成随机数

生成指定范围的随机数_Rust 生成随机数,以及在给定范围内生成随机数 Rust 实践指南... Rust 生态中有一个蛮优秀的 create,用来生成随机数。名字为 rand,目前版本为 0.7.3,属于科学计算分类。rand crate 可以供 Rustacean 生成随机数、范围内随机数、给定分布随机数、自定义类型随机值,以及从一组字母数字字符创建随机密码,从一组用户定义字符创建随机密码等。本文我们从生成随机数,以及生成范围内随机数来入手,对 rand crate 做一个简单的... 阅读详情
AI摘要

本文介绍了如何在Rust中使用rand包生成随机数、指定范围内的随机值,以及创建字母数字和用户定义字符的随机密码。通过Rng和相关模块如Uniform和Alphanumeric,展示了基本的随机生成操作。

生成随机值

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包的使用,还要多查阅官方文档

零知识证明实战指南:Web3隐私工程落地核心要点 零知识证明(ZKP)是一种将复杂计算压缩为可快速验证数学承诺的信任机制,其核心价值在于实现最小必要披露——在不暴露原始数据的前提下完成可信验证。它依托完备性、可靠性与零知识性三大数学基石,通过非交互式构造(如zk-SNARKs)适配区块链的确定性执行环境,并以Succinct性保障链上验证效率。在DeFi、去中心化身份(DID)、链上游戏及企业合规等场景中,ZKP正推动数据主权从平台回归用户。本文聚焦工程实践,解析电路设计、可信设置、链上验证与性能压测等关键环节,结合zk-SNARKs和Halo2等主流方案 阅读详情

相关推荐

分布式采样可验证性:场编码与经验传输认证技术解析

在分布式系统和概率计算中,确保采样算法收敛到理论目标分布是核心挑战。传统单机收敛诊断工具在跨节点异步运行时失效,导致局部稳定假象和全局一致性难以验证。其原理在于通过耦合采样器实现多链协同,并引入场编码技术为每个样本生成可校验的代数证明,从而将概率分布信息转化为可验证的数学结构。该技术的工程价值在于为分布式采样过程提供了数学上严谨的可审计性,解决了算法黑箱与不可信问题。应用场景涵盖金融风险模拟、多中心临床试验数据分析、高合规性AI模型等对可验证性有刚需的领域。本文聚焦场编码与经验传输认证,通过简化模型展示如何

weixin_30271335的博客 356

Rust生成随机数

Rust标准库中并没有随机数生成器,想要实现此类功能,你需要自行设计(纯Rust或FFI到C),或者使用第三方包。一个常见的解决方案是使用rand包,该项目基于。

qq_41757528的博客 1436

[Rust笔记]Rust生成随机数的方法

1、前言 在项目当中,生成随机数、随机密码等经常会使用到。这里总结下Rust随机数生成的方法。Rust我们要用到包模块 rand。具体实现如下: 2、添加模块依赖 [dependencies] rand="0.7.9" 1、生成随机数 利用rand::Rng 库,通过 rand::thread_rng 生成随机数。可以开启多个线程,每个线程都有一个初始化的生成器。整数在其类型范围内均匀分布,浮点数是从 0 均匀分布到 1,但不包括 1 use rand::Rng; fn main() { let

图解AI 3931

开发者必看:AWSConsoleRecorder实现原理与扩展开发指南

AWSConsoleRecorder是一款强大的自动化工具,能够记录AWS管理控制台操作并生成可执行脚本,帮助开发者轻松实现AWS任务自动化。无论是创建EC2实例、配置S3存储桶还是管理IAM权限,这款工具都能将手动操作转化为自动化代码,显著提升云资源管理效率。 ## 核心功能解析:从录制到自动化的完整流程 AWSConsoleRecorder的核心价值在于其**操作录制-脚本生成-自动化执行

gitblog_00041的博客 1128

【Rust入门】生成随机数

在编程中,生成随机数是一种常见的需求,无论是用于数据分析、游戏开发还是模拟实验。Rust提供了强大的库来帮助我们生成随机数。在这篇文章中,我们将通过一个简单的示例来介绍如何在Rust中生成随机数。无论你是一位经验丰富的程序员,还是刚刚开始接触编程,我相信你都会从这个项目中学到一些有用的东西。通过完成这个项目,我们已经对Rust中如何生成随机数有了一个基本的了解。我们学习了如何使用Rust的随机数库,以及如何生成不同类型和范围的随机数。

m0_62599305的博客 1839

生态位宽度计算&可视化展示(R语言)

物种的生态位越宽,该物种的特化程度就越小,倾向于泛化种(generalist species);物种的生态位越窄,倾向于是一个特化种(specialists species)。生态位宽度是指物种(或其它生物单位)在群落中所利用的各种不同资源的总和。本篇所使用为生态位宽度指数即**Levins的生态位宽度指数。

weixin_53705272的博客 4435

retos-programacion-2023 周挑战 43「天气模拟器」实战解析:随机规则建模、状态机设计与多语言实现对照

本篇以 [retos-programacion-2023](https://link.gitcode.com/i/84ceb9134cd6d662737799ed7f26156b) 仓库中 2023 年 10 月 30 日发布的第 43 个周挑战「Simulador de clima / 天气模拟器」(难度:Fácil)为研究对象,完整还原题目规则,并逐行拆解官方解法 [mouredev.py](

gitblog_00066的博客 22

在统信UOS Server 20上踩坑记:手把手教你搞定openGauss 5.0.0企业版安装(附常见报错解决方案)

本文详细记录了在统信UOS Server 20上安装openGauss 5.0企业版的实战经验,包括环境准备、依赖库问题、目录权限、内存参数调优等常见问题的解决方案。通过伪装系统标识、建立软链接、调整内存参数等方法,成功克服国产操作系统与企业级数据库的兼容性挑战,为开发者提供了一份深度排雷指南。

weixin_28698059的博客 265

OpenIDEA:用 Rust 核心重建的 IntelliJ 风格原生 IDE,0.9 秒打开项目

OpenIDEA 是一款以 Rust 为核心、Tauri 为外壳、React 渲染界面的原生 IDE(Rust IDE),完整保留了 IntelliJ IDEA 的键位、工具窗口与"随处搜索"操作习惯。官方实测数据:打开一个约 770 个文件的 Python 项目,窗口 0.9 秒出现、1.1 秒完成索引,全部进程内存占用约 169 MB,而同期 IntelliJ IDEA 2026.2.3 需要

gitblog_01072的博客 587

别再用图片水印了!5种你可能不知道的文本隐写术实战

本文介绍了5种高效的文本隐写术,帮助创作者在不影响内容可读性的情况下嵌入版权信息。从零宽度字符到同形字替换,再到标点符号变形和行尾空格编码,这些技术为数字内容提供了轻量级版权保护方案,特别适用于社交媒体和电子合同等场景。

k8l9m0n的博客 225

Java语音革命:用代码打造永不疲倦的AI客服,让客户支持效率飙升300%!

客户支持领域常面临“薛定谔困境”,即无法预知客户来电的意图是投诉还是表扬。通过Java技术,尤其是语音识别和自然语言处理(NLP),可以有效解决这一问题。文章展示了如何利用Java代码构建“声纹量子引擎”,实现客户支持的自动化。核心技术包括录音与预处理、语音识别和语义理解。通过百度AI API和Stanford NLP,系统能够快速、准确地识别客户语音并理解其意图。数据表明,优化后的AI处理时间从15分钟缩短至18秒,语音识别准确率提升至98.5%,并发处理能力达到单实例1000+请求。这些技术显著提升了客

墨夶的博客 1035

量产烧录一致性:从CRC32校验到可信执行的工程闭环

量产烧录一致性是嵌入式系统交付的核心质量门槛,本质是芯片固件写入过程的可复现性、可追溯性与可证伪性保障。其技术原理涵盖镜像哈希(SHA256)、扇区级校验(CRC32)、物理层验证(eFuse读取)及环境敏感参数(电压/温度/时序)的协同控制。该能力直接决定车规MCU、工业控制器等高可靠性场景的批量交付成败,支撑Secure Boot信任链建立与OTA固件可信更新。实践中,fptw64.exe的-verify模式、rules校验规则、文件魔数校验等并非孤立工具,而是贯穿烧录前中后的多维校验哨兵体系。本文聚焦

weixin_33816821的博客 311

CAPL自动化测试

通过本文的学习,读者应该对CAPL自动化测试有了初步的了解,并能够编写复杂的CAPL脚本。在实际项目中,CAPL的应用非常广泛,希望读者能够通过不断的学习和实践,掌握更多的CAPL技巧,提高自己的开发能力。

闲人编程的博客 1528

告别沉重Postman:Bruno——10MB开源的轻量API客户端实测

接口调试是前后端协作中的高频动作,工具的选择直接影响研发效率。传统工具基于Electron架构,安装包体积庞大、冷启动耗时较长,在资源受限的开发环境中常常影响体验。而采用Tauri重写、基于系统WebView与Rust后端的方案,从底层减少了资源占用,安装包缩小至10MB级别,启动速度提升到秒级,为API调试工具提供了新思路。这类工具的价值不仅在于轻量,更在于数据管理模式的变革:把集合与请求保存为本地纯文本文件,天然适配Git版本控制,让接口定义像代码一样可评审、可回滚,尤其适合对数据安全敏感或已有Git工

weixin_33922670的博客 346

DA14531之如何Debug(在线调试、Jlink仿真、串口打印)

在线调试和串口打印调试。在线调试是Keil软件配合Jlink编译、烧录、仿真为一体的,其操作包括:运行、停止、打断点,单步运行等。而串口打印调试,只需打开相关配置,让arch_printf()函数正常输出串口数据。若想在初始化完成后打印arch_printf(“goto Loop\r\n”);波特率为115200,接收到串口消息goto Loop。连好线后,点击仿真按钮,在线Jlink调试。

hejinwu1314的博客 1792

基于STM32L4XX、HAL库的ICM-42670-P姿态传感器驱动程序设计

sprintf(buffer, "温度: %.1f °C\r\n\r\n", sensor_data.temperature);sprintf(buffer, "陀螺仪: X=%.2f Y=%.2f Z=%.2f rad/s\r\n",sprintf(buffer, "加速度: X=%.2f Y=%.2f Z=%.2f m/s²\r\n",sprintf(buffer, "开始校准IMU,请保持传感器静止...\r\n");sprintf(buffer, "读取传感器数据失败\r\n");

zhusl6688的博客 643

Python实现Cloudflare v2行为指纹绕过:设备伪装与轨迹模拟实战

Web自动化中,Cloudflare v2行为指纹已成为现代反爬核心防线,其本质是通过硬件传感器融合、渲染管线建模与交互熵值量化构建动态用户画像。传统静态设备伪装(如UA伪造)已完全失效,真正有效的对抗需回归‘人类行为仿真’底层逻辑——即模拟加速度计噪声分布、WebGL执行延迟方差及鼠标移动贝塞尔拟合误差等可测量生理特征。Python凭借Scrapy+Playwright+NumPy+OpenCV生态,在轨迹生成、噪声建模与调试可视化上具备不可替代的工程优势,尤其适合构建具备硬件一致性、时序稳定性与行为演化

weixin_33910759的博客 433

stable diffusioncontrolNet 预处理器/模型的下载及安装使用教程

首先说明,controlNet 的模型 不同于stable diffusion 模型,这一点一定要区分清楚。下面提供多个ControlNet 预处理器+ 专用模型的百度网盘下载链接,都是由群友整理贡献,但各自包含的版本不同,大家可自行选择。推荐下载紫色链接内的模型,fp16版文件更小,稍微新一些的controlnet插件还添加了对control-lora的支持(注意,要求controlnet插件的版本比12月16号新(1.1.423以上)才能正常识别),推荐下载;

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 3388

中庸、有容、破执:仓颉编程语言的中华智慧结晶——三重哲学境界思辨

仓颉语言以“中庸、有容、破执”三重哲学为设计核心,回应编程语言“安全、性能、简洁”不可能三角。通过智能类型推断与可控标注平衡开发效率与安全性,借助编译期逃逸分析实现栈上分配,显著降低内存占用与GC压力,空载仅2.08MB;采用用户态线程模型消除函数染色,线程创建耗时低至700ns,兼顾并发性能与编程友好性。其设计不走极端,既非纯静态亦非全动态,而是基于上下文的动态权衡,体现中华智慧在软件工程中的创造性转化。

jackchuanqi的博客 378

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Rust随机数库rand rand_core rand_chacha等

Rust的随机数库如rand/rand_core/rand_chacha等均使用了同一代码库:https://github.com/rust-random/rand/ 其中包含了多个库: 1)rand_core:Core traits and error types of the rand library, plus tools for implementing RNGs. This crat...

mutourend2010@gmail.com 3127

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

rust怎么生成随机数?

在 Rust 中,有几种不同的方法可以实现随机数生成。

Program with head, not hand 3011

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Rust CookBook第一篇:随机数

Rust CookBook第一篇:随机数 本文系转载,出处:http://llever.com/rust-cookbook-zh/algorithms/randomness.zh.html 文章目录Rust CookBook第一篇:随机数一、生成随机数二、生成范围内的随机数三、生成给定分布的随机数四、生成自定义类型的随机值五、从一组字母+数字的字符,创建随机密码六、从一组用户定义的字符,创建随机密码 一、生成随机数 通过rand::thread_rng,在随机数生成器rand::Rng的帮助下,生成随机

xiangxianghehe的博客 1359

Rust入门2——随机数

在Cargo.toml的dependencies中引入rand,指定rand的版本。match表达式,类似switch。cmp用于比较,=>可以认为是case。之后在主函数中调用rand函数,生成随机数。简单列出两个Rust的小例子。

叶卡捷琳堡的博客 1618

小白学Rust(一):Rust产生随机数

先按本人教程如何利用科大源提速Cargo和Rust做好相关配置。然后在linux Bash下执行:cargo new random --bin这会在当前目录创建一个random文件夹,然后修改src下面的main.rs,代码如下:extern crate rand;use rand::Rng;fn main(){ let mut rng =rand::thread_rng(); // Eac

xiangxianghehe的博客 1万+

Rust学习(1)[rand]Rng::gen_range在0.8版本改动与生成随机数

rand 从 0.7版本到0.8版本修动了gen_range用 gen_range(a…b) 替换了gen_range(a, b)部分文本来源:https://rust-random.github.io/book/update-0.8.html。

cc2530nonono的博客 1923

Rust Rand库详解与随机数生成

本文详细介绍了Rust的Rand库(0.9.2版本)的随机数生成功能。主要内容包括:核心概念(RngCore和Rng traits)、常用生成器(线程本地生成器和密码学安全生成器)、关键方法(如gen、gen_range等)、分布抽样(均匀分布和正态分布)以及序列操作(洗牌和加权选择)。文章提供了大量代码示例,并附有完整的方法规格表,涵盖主要trait和结构体的使用方法。该库支持多种随机数生成需求,从基础随机值到复杂的概率分布采样。

本博客分享软硬件一体化开发实战。硬件涵盖 PCB 设计、STM32 等 MCU 底层开发;软件包含 C++、Rust,Qt/QML、PyQt、Slint、TouchGFX、LVGL 各类 GUI 框架。方便软硬件开发者查阅学习。欢迎关注! 1123
上一篇: 黑马点评笔记 redis缓存三大问题解决
下一篇: 黑马点评笔记 redis实现优惠卷秒杀
过去日记
过去日记 新星创作者: 后端开发技术领域 新星创作者: 后端开发技术领域
博客等级 码龄3年 5343粉丝 225原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

过去日记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值