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

Rust 编程小技巧摘选(7)

eb88291a18a94ba4ace118fb4e46ef23.png

Rust 编程小技巧(7)

1. 结构体 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)

2. 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}

3. 遍历输出哈希表

在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


​​​​​​​相关阅读:

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博客

相关文章:

Rust 编程小技巧摘选(7)

Rust 编程小技巧(7) 1. 结构体 Display trait 结构体的两种形式&#xff0c;对应的成员取法不同&#xff1b; 前者用 self.成员变量名 self.x, self.y&#xff1b;后者用 self.成员索引号 self.0, self.1, self.2, ...... use std::fmt::Display; use std::fmt::Result; us…...

爬虫程序中使用爬虫ip的优势

作为一名爬虫技术员&#xff0c;我发现在爬虫程序中使用代理IP可以提升爬取效率和匿名性。今天&#xff0c;我就来详细讲解一下代理IP在爬虫程序中的工作原理及应用。 首先&#xff0c;我们来了解一下代理IP在爬虫程序中的工作原理。当我们使用爬虫程序进行数据采集时&#xf…...

json-server的入门

由于前端开发的时候&#xff0c;需要向后端请求数据&#xff0c;有的时候后端还没有准备好&#xff0c;所以需要使用一些简单的静态数据&#xff0c;但是我们更加希望能够模拟请求以及请求回来的过程&#xff0c;这个时候就需要使用json-server Json-Server的介绍 json-server…...

uniapp调查问卷评价功能

我本来用的是uniapp官方提供的组件uni-rate组件&#xff0c;但修改成我想要的样式有点麻烦&#xff0c;于是我就自己手写一个&#xff0c;比用组件简单一点&#xff1b; dom结构 <text class"formTit must">请您对本次活动进行评价</text> <view cl…...

Centos Linux带进度条复制(同步)文件和文件夹

centos linux 内建文件复制/备份命令 rsync 目的&#xff1a;我想从一个磁盘复制一堆文件到另一个磁盘&#xff0c;不希望改变文件的属性&#xff08;尤其是所有者、还有创建时间、修改时间&#xff09;&#xff0c;最好还得能给我显示进度条。文件太多了&#xff0c;好几百GB…...

从数据仓库到数据结构:数据架构的演变之路

在上个世纪&#xff0c;从电子商务巨头到医疗服务机构和政府部门&#xff0c;数据已成为每家组织的生命线。有效地收集和管理这些数据可以为组织提供宝贵的洞察力&#xff0c;以帮助决策&#xff0c;然而这是一项艰巨的任务。 尽管数据很重要&#xff0c;但CIOinsight声称&…...

kafka-2.12使用记录

kafka-2.12使用记录 安装kafka 2.12版本 下载安装包 根据你的系统下载rpm /deb /zip包等等, 这里我使用的是rpm包 安装命令 rpm -ivh kafka-2.12-1.nfs.x86_64.rpm启动内置Zookeeper 以下命令要写在同一行上 /opt/kafka-2.12/bin/zookeeper-server-start.sh /opt/kafka-2…...

C++笔记之将定时器加入向量并设置定时器的ID为i

C笔记之将定时器加入向量并设置定时器的ID为i code review! 文章目录 C笔记之将定时器加入向量并设置定时器的ID为i关于代码中的void operator()() 运行 代码 #include <chrono> #include <iostream> #include <thread> #include <vector>// 定义定时…...

将一组元素四舍五入到指定精度(小数位数)numpy.around()

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 将一组元素四舍五入 到指定精度(小数位数) numpy.around() [太阳]选择题 关于以下代码说法错误的一项是? import numpy as np anp.array([21.3,9.67,8.5, -1.13, -2.67]) print(【显示】a为…...

tinyint这个值在MySQL中的值有哪些

在MySQL中&#xff0c;TINYINT是一种整数数据类型&#xff0c;用于存储小范围的整数值。它占用1个字节的存储空间&#xff0c;可以表示的值范围是从-128到127&#xff08;有符号&#xff09;或者从0到255&#xff08;无符号&#xff09;。 以下是在MySQL中使用TINYINT数据类型…...

JVM 内存结构

1、方法区&#xff08;线程共享&#xff09; 存储静态变量(静态方法、变量、代码块)、常量池、类信息 2、堆信息&#xff08;线程共享&#xff09; 存储实例对象&#xff0c;例如 new 出来的对象信息 A a1 new A() 3、虚拟机栈&#xff08;线程隔离&#xff09; 每个线程的都有…...

基于百度语音识别API智能语音识别和字幕推荐系统——深度学习算法应用(含全部工程源码)+测试数据集

目录 前言总体设计系统整体结构图系统流程图 运行环境模块实现1. 数据预处理2. 翻译3. 格式转换4. 音频切割5. 语音识别6. 文本切割7. main函数 系统测试工程源代码下载其它资料下载 前言 本项目基于百度语音识别API&#xff0c;结合了语音识别、视频转换音频识别以及语句停顿…...

数字万用表测量基础知识--使用DMM测量电流

概览 DMM&#xff08;即数字万用表&#xff09;是一种电气测试和测量仪器&#xff0c;可测量直流和交流信号的电压、电流和电阻。本文介绍如何正确使用和理解数字万用表(DMM)。 使用DMM测量电流 另一个常见的测量功能是直流和交流电流测量。电压是通过与电路并联进行测量&am…...

【BASH】回顾与知识点梳理(二十)

【BASH】回顾与知识点梳理 二十 二十. 十六至十九章知识点总结及练习20.1 总结20.2 练习 该系列目录 --> 【BASH】回顾与知识点梳理&#xff08;目录&#xff09; 二十. 十六至十九章知识点总结及练习 20.1 总结 shell script 是利用 shell 的功能所写的一个『程序 (prog…...

Arduino驱动SGP40空气质量传感器(气体传感器篇)

目录 1、传感器特性 2、硬件原理图 3、控制器和传感器连线图 4、驱动程序 SGP40空气质量传感器是业内知名的瑞士公司Sensirion推出的新一代SGP40数字VOC传感器芯片。基于Sensirion的CMOSens技术,SGP40在单个芯片上提供了完整的传感器系统,包括温控微加热板和室内空气质量…...

识别和应对内存抖动

关于作者&#xff1a;CSDN内容合伙人、技术专家&#xff0c; 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 &#xff0c;擅长java后端、移动开发、人工智能等&#xff0c;希望大家多多支持。 目录 一、导读二、概览三、案例分析3.1 使用memory-profiler3.2 使用 cp…...

3.3用于共享数据保护的替代工具

用于共享数据保护的替代工具 虽然互斥元是最通用的机制&#xff0c;但提到保护共享数据时&#xff0c;它们并不是唯一的选择&#xff1b;还有别的替代品&#xff0c;可以在特定情况下提供更恰当的保护。 一个特别极端&#xff08;但却相当常见&#xff09;的情况&#xff0c;…...

探索数据之美:初步学习 Python 柱状图绘制

文章目录 一 基础柱状图1.1 创建简单柱状图1.2 反转x和y轴1.3 数值标签在右侧1.4 演示结果 二 基础时间线柱状图2.1 创建时间线2.2 时间线主题设置取值表2.3 演示结果 三 GDP动态柱状图绘制3.1 需求分析3.2 数据文件内容3.3 列表排序方法3.4 参考代码3.5 运行结果 一 基础柱状图…...

647. 回文子串

boolean默认类型是false class Solution {public int countSubstrings(String s) {if(s null) return 0;int result 0;int length s.length();boolean[][] dp new boolean[length][length];for(int j0;j<length;j){for(int i0;i<j;i){if(s.charAt(i) s.charAt(j)){i…...

cmake (更新中)

概述 关于 CMake CMake 是一个可扩展的开源系统&#xff0c;以一种与操作系统和编译器无关的方式来管理构建过程。与许多跨平台系统不同&#xff0c;CMake 被设计为与本机构建环境配合使用。在每个源代码目录中放置简单的配置文件&#xff08;称为 CMakeLists.txt 文件&#xf…...

终极指南:如何高效使用geerlingguy/dotfiles提升开发效率

终极指南&#xff1a;如何高效使用geerlingguy/dotfiles提升开发效率 【免费下载链接】dotfiles My configuration. Minimalist, but helps save a few thousand keystrokes a day. 项目地址: https://gitcode.com/gh_mirrors/dotfiles52/dotfiles 在软件开发领域&#…...

GME-Qwen2-VL-2B-Instruct实操手册:图文匹配工具性能压测与QPS基准报告

GME-Qwen2-VL-2B-Instruct实操手册&#xff1a;图文匹配工具性能压测与QPS基准报告 1. 引言&#xff1a;为什么你需要一个本地图文匹配工具&#xff1f; 想象一下这个场景&#xff1a;你手头有几千张商品图片&#xff0c;需要为每张图片自动生成最贴切的标题&#xff0c;或者…...

Arduino Portenta H7低功耗库深度解析:Sleep/Deep Sleep/Standby三模式实战

1. 项目概述Arduino Portenta H7 Low Power Library 是专为 Arduino Portenta H7 开发板设计的底层功耗管理库&#xff0c;其核心目标是为嵌入式开发者提供对 STM32H747XI 双核微控制器&#xff08;Cortex-M7 Cortex-M4&#xff09;全层级低功耗模式的细粒度控制能力。该库并非…...

CATIA 转 SolidWorks 高效转换技巧:迪威模型网实战解析

1. CATIA与SolidWorks转换的必要性 在工程设计领域&#xff0c;CATIA和SolidWorks就像两个说着不同方言的工程师。我见过太多团队因为文件格式不通用而耽误进度&#xff0c;特别是当汽车供应商收到主机厂的CATIA文件时&#xff0c;经常需要熬夜加班做格式转换。迪威模型网的在线…...

OpenClaw模型热切换:百川2-13B-4bits与Qwen的无缝交替使用

OpenClaw模型热切换&#xff1a;百川2-13B-4bits与Qwen的无缝交替使用 1. 为什么需要模型热切换&#xff1f; 去年冬天&#xff0c;我在用OpenClaw处理一个跨语言项目时遇到了典型困境&#xff1a;Qwen在中文材料整理上表现出色&#xff0c;但处理英文技术文档时总会出现微妙…...

零基础玩转OpenClaw:Qwen2.5-VL-7B多模态模型入门指南

零基础玩转OpenClaw&#xff1a;Qwen2.5-VL-7B多模态模型入门指南 1. 为什么选择OpenClawQwen2.5-VL组合 去年夏天&#xff0c;当我第一次看到同事用自然语言指令让AI自动整理会议纪要时&#xff0c;内心受到了巨大冲击。经过两周的折腾&#xff0c;我终于在自己的MacBook上搭…...

AI赋能智能制造:预测性维护在工业4.0中的落地实践

1. 预测性维护&#xff1a;从被动维修到智能预防的革命 想象一下&#xff0c;你家的空调突然在炎热的夏天罢工了&#xff0c;维修师傅告诉你&#xff1a;"这个零件本来三个月前就该换了"。这种场景在工业生产中放大1000倍&#xff0c;就是传统维护方式带来的痛点。预…...

天地图图层标识全解析:从代码到坐标系的实战指南

1. 天地图图层标识入门&#xff1a;为什么你需要了解这些代码&#xff1f; 第一次接触天地图开发时&#xff0c;我也被那些神秘的代码搞晕了。vec_w、cva_w、img_c...这些看起来像密码一样的字符串&#xff0c;其实藏着地图服务的核心秘密。简单来说&#xff0c;天地图的每个图…...

TranslucentTB:轻量级Windows任务栏透明化工具的深度解析与场景化应用

TranslucentTB&#xff1a;轻量级Windows任务栏透明化工具的深度解析与场景化应用 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB Transl…...

GLM-. 全面支持与 Gemini CLI 集成:HagiCode 的多模型进化之路闲

1. 流图&#xff1a;数据的河流 如果把传统的堆叠面积图想象成一块块整齐堆叠的积木&#xff0c;那么流图就像一条蜿蜒流淌的河流&#xff0c;河道的宽窄变化自然流畅&#xff0c;波峰波谷过渡平滑。 它特别适合展示多个类别数据随时间的变化趋势&#xff0c;尤其是当你想强调…...