Rust 编程小技巧摘选(7)

eb88291a18a94ba4ace118fb4e46ef23.png

目录

Rust 编程小技巧(7)

1. 交换变量

2. 翻转数组

3. for_each() 用法

4. 结构体 Display trait

5. HashMap 和 BTreeMap

6. 遍历输出哈希表

7. 分离奇数和偶数

8. 判断素数(质数)


Rust 编程小技巧(7)

1. 交换变量

与python, go等语言用法类似,不同的是rust不能省掉元组的括号 () 。

fn main() {let a = 3;let b = 23;println!("a: {}, b: {}", a, b);let (a, b) = (b, a);println!("a: {}, b: {}", a, b);
}

输出:

a: 3, b: 23
a: 23, b: 3

2. 翻转数组

fn main() {let x = vec!["Hello", "World"];let y: Vec<_> = x.iter().rev().collect();println!("{:?}\n{:?}", x, y);let mut z = vec![1,2,3];println!("{:?}", z);z.reverse();println!("{:?}", z);
}

输出:

["Hello", "World"]
["World", "Hello"]
[1, 2, 3]
[3, 2, 1] 

3. 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]

4. 结构体 Display trait

结构体的两种形式,对应的成员取法不同;

前者用 self.成员变量名 self.x, self.y;后者用 self.成员索引号 self.0, self.1, self.2, ......

use std::fmt::Display;
use std::fmt::Result;
use std::fmt::Formatter;struct Point {x: f64,y: f64,
}struct Point2(f64, f64);impl Display for Point {fn fmt(&self, f: &mut Formatter<'_>) -> Result {write!(f, "({}, {})", self.x, self.y)}
}impl Display for Point2 {fn fmt(&self, f: &mut Formatter<'_>) -> Result {write!(f, "({}, {})", self.0, self.1)}
}fn main() {let p = Point { x: 2.0, y: -3.5 };println!("{}", p);let p = Point2(2.0, -3.5);println!("{}", p);
}

 输出:

(2, -3.5)
(2, -3.5)

5. HashMap 和 BTreeMap

两者都是 Rust 中的哈希表数据结构,它们的相同点:

都支持使用 Vec 或 String 作为键,也支持使用标准库中的其他结构体作为键。
都支持使用 Option 类型作为键值对中的值。
都支持使用 HashMap 类型的成员函数来进行基本的操作,例如插入、删除、查找、更新等。

不同点:

HashMap 使用哈希表(HashMap)算法来存储键值对,而 BTreeMap 使用 B-TREE(B 树)算法来存储键值对。因此,BTreeMap 在查找、插入、删除等操作上的性能比 HashMap 更好。

如果需要使用哈希表(HashMap)数据结构,但不需要按照键值对的顺序来访问,而且对查找、插入、删除等操作的性能要求不高,那么可以使用 HashMap。如果需要使用哈希表(HashMap)数据结构,而且对查找、插入、删除等操作的性能要求较高,而且需要按照键值对的顺序来访问,那么可以使用 BTreeMap。

示例:

use std::collections::BTreeMap;
use std::collections::HashMap;fn main() {let mut x = BTreeMap::new();x.insert("one", 1);x.insert("two", 2);println!("{:?}", x);let x: HashMap<&str, i32> = [("one", 1),("two", 2),].iter().cloned().collect();println!("{:?}", x);
}

输出:

{"one": 1, "two": 2}
{"one": 1, "two": 2}

6. 遍历输出哈希表

在for...in...循环结构中使用元组(k, v)读取对应键值对:

use std::collections::BTreeMap;
use std::collections::HashMap;fn main() {let mut x = BTreeMap::new();x.insert("one", 1);x.insert("two", 2);x.insert("three", 3);x.insert("four", 4);for (k, v) in &x {println!("Key={}, Value={}", k, v);}println!();let x: HashMap<&str, i32> = [("one", 1),("two", 2),("three", 3),("four", 4),].iter().cloned().collect();for (k, v) in &x {println!("Key={key}, Value={val}", key = k, val = v);}
}

输出:

Key=four, Value=4
Key=one, Value=1
Key=three, Value=3
Key=two, Value=2

Key=three, Value=3
Key=two, Value=2
Key=one, Value=1
Key=four, Value=4

7. 分离奇数和偶数

.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  

8. 判断素数(质数)

.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)_Hann Yang的博客-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/87140.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第一百二十七天学习记录:我的创作纪念日

机缘 今天收到CSDN官方的来信&#xff0c;想想也可以对我前面的学习记录进行一个总结。 关于来到CSDN的初心&#xff0c;也就是为了让自己养成一个良好的学习总结的习惯。这里要感谢我C语言视频教程的老师&#xff0c;是他建议学生们在技术博客中进行记录。对于技术博客&…

RabbitMQ的6种工作模式

RabbitMQ的6种工作模式 官方文档&#xff1a; http://www.rabbitmq.com/ https://www.rabbitmq.com/getstarted.html RabbitMQ 常见的 6 种工作模式&#xff1a; 1、simple简单模式 1)、消息产生后将消息放入队列。 2)、消息的消费者监听消息队列&#xff0c;如果队列中…

从零开始学python(十六)爬虫集群部署

前言 今天讲述Python框架源码专题最后一个部分&#xff0c;爬虫集群部署&#xff0c;前面更新了十五个从零开始学python的系列文章&#xff0c;分别是&#xff1a; 1.编程语法必修篇 2.网络编程篇 3.多线程/多进程/协程篇 4.MySQL数据库篇 5.Redis数据库篇 6.MongoDB数据库篇 …

Linux:Shell编辑之文本处理器(sed)

目录 绪论 1、sed的原理&#xff1a;读取 执行 显示 三个过程 2、sed 文本内容处理工具&#xff0c;文件过大怎么办&#xff1f; 3、sed的操作选项 3.1 常用选项 3.2 操作符 3.3 行号的范围打印 3.4 对包含指定字符串的内容进行打印 3.5 删 3.5.1 正则表达式删除 3.6…

Vue3 Props组件简单应用(父组件获取子组件数据)

去官网学习→Props | Vue.js 运行示例&#xff1a; 代码&#xff1a;App.vue <template><img alt"Vue logo" src"./assets/logo.png"><h2>Vue Props数据传递</h2><h4>子组件中的数据&#xff1a;{{ content }}</h4>…

【设计模式】桥接模式

桥接&#xff08;Bridge&#xff09;是用于把抽象化与实现化解耦&#xff0c;使得二者可以独立变化。这种类型的设计模式属于结构型模式&#xff0c;它通过提供抽象化和实现化之间的桥接结构&#xff0c;来实现二者的解耦。 这种模式涉及到一个作为桥接的接口&#xff0c;使得…

AI:03-基于深度神经网络的低空无人机目标检测图像识别的研究

文章目录 数据集收集与预处理深度神经网络模型设计模型训练与优化目标检测与图像识别代码实现:实验结果与分析讨论与展望低空无人机的广泛应用为许多领域带来了巨大的潜力和机会。为了实现无人机的自主导航和任务执行,准确的目标检测和图像识别是至关重要的。本文旨在研究并提…

SQL | 排序检索的数据

3-排序检索的数据 使用order by语句排序检索到的数据。 3.1-排序数据 使用SQL语句返回一个数据表的列。 select prod_id from products; --------------------- | prod_name | --------------------- | 8 inch teddy bear | | 12 inch teddy bear | | 18 inch teddy bear |…

【2023 华数杯全国大学生数学建模竞赛】 A题 隔热材料的结构优化控制研究 问题分析及完整论文

【2023 华数杯全国大学生数学建模竞赛】 A题 隔热材料的结构优化控制研究 问题分析及完整论文 1 题目 A 题 隔热材料的结构优化控制研究 新型隔热材料 A 具有优良的隔热特性&#xff0c;在航天、军工、石化、建筑、交通等高科技领域中有着广泛的应用。 目前&#xff0c;由单…

uniapp 小兔鲜儿 - 首页模块(1)

目录 自定义导航栏 静态结构 安全区域​ 通用轮播组件 静态结构 自动导入全局组件 全局组件类型声明 .d.ts文件 注册组件 vue/runtime-core 首页 – 轮播图指示点 首页 – 获取轮播图数据 首页 – 轮播图数据类型并渲染 首页 – 轮播图总结 首页分类 首页 – 前…

RocketMQ 延迟消息

RocketMQ 延迟消息 RocketMQ 消费者启动流程 什么是延迟消息 RocketMQ 延迟消息是指&#xff0c;生产者发送消息给消费者消息&#xff0c;消费者需要等待一段时间后才能消费到。 使用场景 用户下单之后&#xff0c;15分钟未支付&#xff0c;对支付账单进行提醒或者关单处理…

推荐 4 个 yyds 的 GitHub 项目

本期推荐开源项目目录&#xff1a; 1. 开源的 Markdown 编辑器 2. MetaGPT 3. SuperAGI 4. 一个舒适的笔记平台 01 开源的 Markdown 编辑器 Cherry 是腾讯开源的 Markdown 编辑器&#xff0c;基于 Javascript具有轻量简洁、易于扩展等特点&#xff0c; 它可以运行在浏览器或服…

【C语言】进阶指针,超详解,含丰富代码示例

文章目录 前言指针进阶的重点内容1.字符指针2.数组指针3.指针数组4.函数指针5.函数指针数组6. 指向函数指针数组的指针 总结 这里是初阶的链接&#xff0c;方便大家对照查看&#xff01;&#xff01;&#xff01;添加链接描述 前言 大家好呀&#xff0c;今天和大家将指针进阶…

【Linux】网络基础2

文章目录 网络基础21. 应用层1.1 协议1.2 HTTP 协议1.2.1 URL1.2.2 urlencode和urldecode1.2.3 HTTP协议格式1.2.4 HTTP的方法1.2.5 HTTP的状态码1.2.6 HTTP 常见的header1.2.7 最简单的HTTP服务器 2. 传输层2.1 端口号2.1.1 端口号范围划分2.1.2 认识知名端口号2.1.3 netstat2…

RISC-V走向开放服务器规范

原文&#xff1a;RISC-V Moving Toward Open Server Specification 作者&#xff1a;Agam Shah 转载自&#xff1a;https://www.hpcwire.com/2023/07/24/risc-v-moving-toward-open-server-specification/ 中文翻译&#xff1a; 2023年7月24日 RISC-V International目前正…

Android之消除APP图标的白色边框

有问题的效果&#xff1a; 解决方案&#xff1a; 第一步&#xff1a;app右键—>new—>Image Asset 第二步&#xff1a;上传Logo图标&#xff0c;选择每种分辨率&#xff0c;预览看效果&#xff0c;选择Resize&#xff0c;可以微调 第三步&#xff1a;点击 Next&#xff…

pytest-xdist分布式测试原理浅析

目录 pytest-xdist执行流程&#xff1a; pytest-xdist 模块结构&#xff1a; pytest-xdist分布式测试原理&#xff1a; pytest-xdist源码浅读&#xff1a; pytest-xdist执行流程&#xff1a; 解析命令行参数&#xff1a;pytest-xdist 会解析命令行参数&#xff0c;获取用户…

K8s环境下监控告警平台搭建及配置

Promethues是可以单机搭建的&#xff0c;参考prometheus入门[1] 本文是就PromethuesGrafana在K8s环境下的搭建及配置 Prometheus度量指标监控平台简介 启动minikube minikube start 安装helm 使用Helm Chart 安装 Prometheus Operator: helm install prometheus-operator stabl…

idea找不到DataBase

一、我想把数据库跟我的idea链接&#xff0c;结果发现找不到。如图。 二、解决方案 找到 file ---setting 找到plugin------找到marketplace 我的已经出现了

Jmeter入门之digest函数 jmeter字符串连接与登录串加密应用

登录请求中加密串是由多个子串连接&#xff0c;再加密之后传输。 参数连接&#xff1a;${var1}${var2}${var3} 加密函数&#xff1a;__digest &#xff08;函数助手里如果没有该函数&#xff0c;请下载最新版本的jmeter5.0&#xff09; 函数助手&#xff1a;Options > …