当前位置: 首页 > news >正文

Rust 编程小技巧摘选(6)

eb88291a18a94ba4ace118fb4e46ef23.png

目录

Rust 编程小技巧(6)

1. 打印字符串

2. 重复打印字串

3. 自定义函数

4. 遍历动态数组

5. 遍历二维数组

6. 同时遍历索引和值

7. 迭代器方法的区别

8. for_each() 用法

9. 分离奇数和偶数

10. 判断素数(质数)


Rust 编程小技巧(6)

1. 打印字符串

fn main() {println!("Hello, world");let s = "Rust";print!("{}", s);println!();
}

Rust 打印主要用宏 print!()、println!(),打印宏的占位符使用 {}。

2. 重复打印字串

有多种方法,比如使用:循环、string.repeat()、vector.join()等等。

fn main() {for _ in 0..8 {print!("rust");}println!("\n{}", "rust".repeat(8));let s = vec!["rust"; 8];println!("{:?}", s);println!("{}", s.join(""));println!("{}", s.join("."));
}

输出:

rustrustrustrustrustrustrustrust
rustrustrustrustrustrustrustrust
["rust", "rust", "rust", "rust", "rust", "rust", "rust", "rust"]
rustrustrustrustrustrustrustrust
rust.rust.rust.rust.rust.rust.rust.rust

3. 自定义函数

比如,一个整数的平方、绝对值

fn square(x: i32) -> i32 {x * x
}fn abs(x: i32) -> i32 {if x < 0 {return -x;}x
}fn main() {let n = square(9);println!("{}", n);println!("{}", abs(-10));
}

rust 函数的返回关键字 return,在最后的出口可以省略,只需一个表达式(不用分号结尾)。

4. 遍历动态数组

.into_iter() 转迭代器

fn main() {let items = vec![11, 22, 33];for x in items.clone().into_iter() {do_something(x);}items.clone().into_iter().for_each(|x| do_something(x));println!("{:?}", items);
}fn do_something(n: i64) {println!("Number {}", n)
}

输出:

Number 11
Number 22
Number 33
Number 11
Number 22
Number 33
[11, 22, 33]

5. 遍历二维数组

.iter() 创建迭代器 

fn main() {let vec = vec![vec![1, 2], vec![3, 4], vec![5, 6]];  for outer_iter in vec.iter() {  for inner_iter in outer_iter.iter() {  print!("{} ", inner_iter);  }  }println!();vec.iter().for_each(|x| x.iter().for_each(|y| print!("{} ", y)));println!();
}

6. 同时遍历索引和值

.enumerate() 枚举

fn main() {test1();test2();
}fn test1() {let items = ["a", "b", "c"];for (i, x) in items.iter().enumerate() {println!("Item {} = {}", i, x);}
}fn test2() {let items = ["a", "b", "c"];items.iter().enumerate().for_each(|(i, x)| {println!("Item {} = {}", i, x);});
}

7. 迭代器方法的区别

.into_iter() 和 .iter() 两个方法都用于创建迭代器,它们的区别在于:

1.所有权转移:.into_iter() 方法会消耗当前的集合,并将所有权转移给迭代器。这意味着在迭代完成后,原集合将不再可用。而 .iter() 方法不会消耗集合,它只是创建一个新的迭代器,你可以在迭代完成后继续使用原集合。

2.消耗和产生元素:.into_iter() 会消耗集合中的元素,并将它们放入迭代器中。这意味着每次调用迭代器的 next() 方法都会消耗集合中的一个元素。而 .iter() 只是产生元素的引用,并不会消耗集合中的元素。

3.用途:当你需要遍历集合中的元素并获取它们的所有权时,应该使用 .into_iter()。当你只需要读取集合中的元素而不消耗它们时,应该使用 .iter()。

8. for_each() 用法

fn main() {// 迭代一个 vec 并打印每个元素  let vec = vec![1, 2, 3, 4, 5];  vec.iter().for_each(|x| print!("{} ", x));println!();// 迭代一个字符串并打印每个字符  let s = "hello";  s.chars().for_each(|c| print!("{} ", c));println!();// 迭代一个 vec 并将其元素加倍  let mut v1 = vec![1, 2, 3, 4, 5];let mut v2 = vec![];v1.iter().for_each(|x| v2.push(x * 2));  println!("{:?}", v2);v1.clone().iter().for_each(|x| v1.push(x * 2));  println!("{:?}", v1);
}

输出:

1 2 3 4 5 
h e l l o 
[2, 4, 6, 8, 10]
[1, 2, 3, 4, 5, 2, 4, 6, 8, 10]

9. 分离奇数和偶数

.filter() 方法是一个在标准库中的std::iter::Iterator trait的默认方法。这个方法会创建一个新的迭代器,包含所有满足给定条件的元素。

示例:分离一个数组中的奇数和偶数

fn main() {let mut vec = vec![1, 2, 3, 4, 5];  vec.clone().iter().for_each(|x| vec.push(x + 5));  println!("{:?}", vec);fn is_even(x: &i32) -> bool { *x % 2 == 0 }fn print_x(x: &i32) { print!("{} ", x) }vec.iter().filter(|x| !is_even(x)).for_each(|x| print_x(x));println!();vec.iter().filter(|x| is_even(x)).for_each(|x| print_x(x));println!();
}

输出:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
1 3 5 7 9 
2 4 6 8 10  

10. 判断素数(质数)

.any() 方法是一个在标准库中的std::iter::Iterator trait的默认方法。这个方法会检查迭代器中是否有元素满足给定的条件,如果有元素满足条件,它就会返回true,否则返回false。

示例:求30以内的质数

fn is_prime(n: u64) -> bool {match n {0..=1 => false,_ => !(2..n).any(|d| n % d == 0),}
}fn main() {for i in 1..=30 {if is_prime(i) {print!("{} ", i);}}println!();
}

输出:

2 3 5 7 11 13 17 19 23 29 


 相关阅读:

Rust 编程小技巧摘选(1)_Hann Yang的博客-CSDN博客

Rust 编程小技巧摘选(2)_Hann Yang的博客-CSDN博客

Rust 编程小技巧摘选(3)_Hann Yang的博客-CSDN博客

Rust 编程小技巧摘选(4)_Hann Yang的博客-CSDN博客

Rust 编程小技巧摘选(5)_Hann Yang的博客-CSDN博客

相关文章:

Rust 编程小技巧摘选(6)

目录 Rust 编程小技巧(6) 1. 打印字符串 2. 重复打印字串 3. 自定义函数 4. 遍历动态数组 5. 遍历二维数组 6. 同时遍历索引和值 7. 迭代器方法的区别 8. for_each() 用法 9. 分离奇数和偶数 10. 判断素数&#xff08;质数&#xff09; Rust 编程小技巧(6) 1. 打印…...

如何保证Redis缓存和数据库的一致性问题

熟练掌握Redis缓存技术&#xff1f; 那么请问Redis缓存中有几种读写策略&#xff0c;又是如何保证与数据库的一致性问题 今天来聊一聊常用的三种缓存读写策略 Cache Aside Pattern Cache Aside Pattern 是我们平时使用比较多的一个缓存读写模式&#xff0c;比较适合读请求比…...

【数据分析入门】人工智能、数据分析和深度学习是什么关系?如何快速入门 Python Pandas?

目录 一、前言二、数据分析和深度学习的区别三、人工智能四、深度学习五、Pandas六、Pandas数据结构6.1 Series - 序列6.2 DataFrame - 数据框 七、输入、输出7.1 读取/写入CSV7.2 读取/写入Excel7.3 读取和写入 SQL 查询及数据库表 八、调用帮助九、选择(这里可以参考上一篇文…...

JavaScript 里三个点 ... 的用法

// table表头数据let tableHeadData deepClone(data);let tableCacheData [];//表格缓存对比if (!parent && isCacheHeadData) {// 缓存数据keylet tableCacheKey ${window.location.pathname}-${$self.attr(id)}if (localStorage.getItem(tableCacheKey)) {//根据缓…...

Linux修改系统语言

sudo dpkg-reconfigure locales 按pagedown键&#xff0c;移动红色光标到 zh_CN.UTF-8 UTF-8&#xff0c;空格标记*号&#xff08;没标记下一页没有这一项&#xff09;&#xff0c;回车。 下一页选择 zh_CN.UTF-8。 如果找不到 dpkg-reconfigure whereis dpkg-reconfigure …...

Spring注解开发

目录 1、简介 2、原始注解 2.1、注解种类 2.2、组件扫描 2.3、具体使用 2.3.1、xml配置 2.3.2、注解配置 3、⭐新注解 3.1、新注解种类 3.2、实践 3.3、运行结果 3.4、警告信息 1、简介 Spring框架提供了许多注解&#xff0c;用于在Java类中进行配置和标记&#xf…...

图像处理库(Opencv, Matplotlib, PIL)以及三者之间的转换

文章目录 1. Opencv2. Matplotlib3. PIL4. 三者的区别和相互转换5. Torchvision 中的相关转换库5.1 ToPILImage([mode])5.2 ToTensor5.3 PILToTensor 1. Opencv opencv的基本图像类型可以和numpy数组相互转化&#xff0c;因此可以直接调用torch.from_numpy(img) 将图像转换成t…...

html+Vue+封装axios实现发送请求

在html中使用Vue和Axios时&#xff0c;可以在HTML中引入Vue库和Axios库&#xff0c;然后使用Vue的语法和指令来创建Vue组件和模板。在Vue组件中&#xff0c;你可以使用Axios发送HTTP请求来获取数据&#xff0c;并将数据绑定到Vue模板中进行展示。 <template><div>&…...

GoogLeNet卷积神经网络输出数据形参分析-笔记

GoogLeNet卷积神经网络输出数据形参分析-笔记 分析结果为&#xff1a; 输入数据形状:[10, 3, 224, 224] 最后输出结果&#xff1a;linear_0 [10, 1] [1024, 1] [1] 子空间执行逻辑 def forward_old(self, x):# 支路1只包含一个1x1卷积p1 F.relu(self.p1_1(x))# 支路2包含 1…...

【docker】dockerfile发布springboot项目

目录 一、实现步骤二、示例 一、实现步骤 1.定义父镜像&#xff1a;FROM java:8 2.定义作者信息&#xff1a;MAINTAINER&#xff1a;learn_docker<https://www.docker.com> 3.将jar包添加到容器&#xff1a;ADD jar包名称.jar app.jar 4.定义容器启动执行命令&#xff1a…...

利用docker run -v 命令实现使用宿主机中没有的命令

利用docker run -v 命令实现使用宿主机中没有的命令 使用容器中的jar命令解压jar包&#xff0c;并将解压内容输出到挂载在宿主机中的目录里 使用容器中的jar命令解压jar包&#xff0c;并将解压内容输出到挂载在宿主机中的目录里 docker run -it --name java -v /www/temp/java…...

【小沐学NLP】在线AI绘画网站(百度:文心一格)

文章目录 1、简介2、文心一格2.1 功能简介2.2 操作步骤2.3 使用费用2.4 若干示例2.4.1 女孩2.4.2 昙花2.4.3 山水画2.4.4 夜晚2.4.5 古诗2.4.6 二次元2.4.7 帅哥 结语 1、简介 当下&#xff0c;越来越多AI领域前沿技术争相落地&#xff0c;逐步释放出极大的产业价值&#xff0…...

react经验5:访问子组件内容

应用场景 父级需要调用子组件的某函数 实现步骤 案例&#xff1a;创建自定义按钮 button.tsx import { Ref, forwardRef, useImperativeHandle,ReactNode} from "react" declare type ButtonProps {/**按钮文字 */children?: ReactNode,onClick?: () > voi…...

【LeetCode】647. 回文子串

题目链接 文章目录 1. 思路讲解1.1 方法选择1.2 dp表的创建1.3 状态转移方程1.4 填表顺序 2. 代码实现 1. 思路讲解 1.1 方法选择 这道题我们采用动态规划的解法&#xff0c;倒不是动态规划的解法对于这道题有多好&#xff0c;它并不是最优解。但是&#xff0c;这道题的动态…...

Open3D(C++) 角度制与弧度制的相互转换

目录 一、弧度转角度1、计算公式2、主要函数3、示例代码4、结果展示二、角度转弧度1、计算公式2、主要函数3、示例代码4、结果展示三、归一化到(-PI,PI)1、主要函数<...

【小沐学NLP】在线AI绘画网站(网易云课堂:AI绘画工坊)

文章目录 1、简介1.1 参与方式1.2 模型简介 2、使用费用3、操作步骤3.1 选择模型3.2 输入提示词3.3 调整参数3.4 图片生成 4、测试例子4.1 小狗4.2 蜘蛛侠4.3 人物4.4 龙猫 结语 1、简介 Stable Diffusion是一种强大的图像生成AI&#xff0c;它可以根据输入的文字描述词&#…...

GNN code Tips

1. 重置label取值范围 problem: otherwise occurs IndexError: target out of bounds # reset labels value range, otherwise occurs IndexError: target out of bounds uni_set torch.unique(labels) to_set torch.tensor(list(range(len(uni_set)))) labels_reset label…...

物联网|按键实验---学习I/O的输入及中断的编程|函数说明的格式|如何使用CMSIS的延时|读取通过外部中断实现按键捕获代码的实现及分析-学习笔记(14)

文章目录 通过外部中断实现按键捕获代码的实现及分析Tip1:函数说明的格式Tip2:如何使用CMSIS的延时GetTick函数原型stm32f407_intr_handle.c解析中断处理函数&#xff1a;void EXTI4_IRQHandler 调试流程软件模拟调试 两种代码的比较课后作业: 通过外部中断实现按键捕获代码的实…...

Java对象的前世今生

文章目录 一、创建对象的步骤二、类加载机制三、内存分配指针碰撞 (内存连续)空闲列表 (内存不连续) 四、创建对象的5种方法五、浅拷贝与深拷贝 以下一行代码内部发生了什么&#xff1f; Person person new Person();一、创建对象的步骤 根据JLS中的规定&#xff0c;Java对象…...

Qt中JSON的使用

一.前言&#xff1a; JSON是一种轻量级数据交换格式&#xff0c;常用于客户端和服务端的数据交互&#xff0c;不依赖于编程语言&#xff0c;在很多编程语言中都可以使用JSON&#xff0c;比如C&#xff0c;C&#xff0c;Java&#xff0c;Android&#xff0c;Qt。除了JSON&#x…...

麦肯锡AI揭秘:AI的真正价值不在算法,而在重构组织与结构竞争力

【摘者按&#xff1a;麦肯锡在《The State of AI 2025》报告中深刻指出&#xff0c;AI的真正价值早已超越了单纯的算法性能&#xff0c;其核心在于通过“重构”来重塑企业的组织与结构竞争力。当企业走出“试点炼狱”&#xff0c;不再将AI视为简单的技术堆砌&#xff0c;而是将…...

【MATLAB源码-第439期】基于MATLAB的APSK与QAM高阶调制在Saleh非线性功放下BER和EVM性能对比

操作环境&#xff1a;MATLAB 2024a1、算法描述摘要 高阶数字调制技术是现代无线通信和卫星通信系统提高频谱利用率的重要方法。QAM 调制通过同相分量和正交分量的幅度组合形成二维星座&#xff0c;在较高信噪比条件下能够获得较高的信息承载能力。APSK 调制则采用多环幅相结构&…...

毕业设计 深度学习多目标跟踪 实时检测

文章目录 0 前言2 目标跟踪效果3 目标跟踪的两种方法3.1 方法13.2 方法2 4 Tracking By Detecting的跟踪过程4.1 存在的问题4.2 基于轨迹预测的跟踪方式 5 训练代码6 最后 0 前言 &#x1f525; 今天学长向大家分享一个毕业设计项目 为了大家能够顺利以及最少的精力通过毕设&…...

紧急!你的灵感工作流正在被Perplexity范式淘汰:3个信号预警+2天迁移 checklist(含Prompt审计表)

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;紧急&#xff01;你的灵感工作流正在被Perplexity范式淘汰&#xff1a;3个信号预警2天迁移 checklist&#xff08;含Prompt审计表&#xff09; 当你反复修改同一个提示词却仍得不到结构化输出&#xff0c;当团…...

Codex + SSH 远程运维实战:让 AI 管你的云服务器

Codex SSH 远程运维实战&#xff1a;让 AI 管你的云服务器从 Docker 部署到数据库调优&#xff0c;从日志排查到安全加固——用 Codex CLI 通过 SSH 管理云服务器的完整实战指南。一、为什么用 Codex 做运维&#xff1f; 传统运维的痛点&#xff1a; 半夜报警&#xff0c;睡眼…...

程序员转行方向推荐:程序员转行新风口!掌握AI大模型,高薪就业不是梦!

本文为程序员提供转行方向建议&#xff0c;涵盖数据分析师、人工智能工程师、AI大模型和产品经理等职业&#xff0c;分析其推荐理由及技能要求。特别强调AI大模型的发展趋势和人才需求&#xff0c;提供系统化学习资源和进阶路线图&#xff0c;帮助程序员在AI时代提升竞争力&…...

【人工智能】某公司AI落地实践总结

某公司AI落地实践总结 一、AI落地的整体路径框架 某公司的AI落地遵循"认知 → 工具使用 → 流程自动化 → 高阶能力构建 → 场景化落地 → 持续迭代 → 激励驱动"的闭环路径,具体分为四个阶段: 初阶入门(认知筑基):AI基础概念与常用工具,零基础扫盲,掌握提示…...

别再乱接线了!12V手电钻保护板(B+/B-/B1/B2)保姆级接线图解,附万用表检测电池坏点技巧

12V手电钻保护板接线全攻略&#xff1a;从原理到实战的安全操作指南 面对手电钻保护板上密密麻麻的接线端子&#xff0c;即使是经验丰富的DIY爱好者也难免感到困惑。B、B-、B1、B2这些看似简单的标记背后&#xff0c;实际上隐藏着锂电池组安全工作的关键机制。本文将带您深入理…...

PyTorch实战:多GPU环境下torch.cuda.set_device()的显式与隐式设备管理对比

1. 多GPU环境下的设备管理基础 当你在实验室或者公司服务器上看到多块GPU时&#xff0c;是不是既兴奋又有点无从下手&#xff1f;PyTorch为我们提供了多种方式来管理这些计算资源&#xff0c;但选择不当可能会带来意想不到的问题。让我们从一个实际场景开始&#xff1a;假设你正…...

通过Taotoken审计日志功能追踪与分析API调用情况

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 通过Taotoken审计日志功能追踪与分析API调用情况 对于使用大模型API进行开发的项目团队而言&#xff0c;清晰、透明地掌握API调用情…...