【第三课】Rust变量与数据类型(二)

目录

前言

Vector

HashMap

其他


前言

上一课介绍了rust的变量和常见的数据类型,走马观花的看了一下rust常见的变量和数据类型,这些都是rust的基本语法,整理出来只是起一个引子的效果,基本语法多练习才可以熟练。这一课继续介绍rust中的容器类型Vector和HashMap,这也是在工作中使用频率非常高的。开发代码都是这些基本的数据结构加上流程控制完成业务需求,虽然有些枯燥,但这就是工作。

开始之前,我们依旧使用cargo init lesson3创建一个新项目来保存这节课的代码。

Vector

vector,可变数组,这里的可变是相对于Array而言的,rust中的数组是长度不可变的,但是vector是长度可变的,类似于java中的ArrayList。关于vec的定义和增删改查都在下面代码中写了demo和详细解释,特殊说明的,在最后几行我们使用了枚举和模式匹配,还记得上一课中我们提到的枚举么,我们使用get方法获取的结果是Option,在vscode中可以点开源码查看Option的定义,它就是我们以后高频使用的枚举之一,枚举和模式匹配搭配一起使用,用来解析Option中是否存在值。

fn main() {// 定义方式1let mut v1: Vec<i32> = Vec::new();// 定义方式2let mut v2: Vec<i32> = vec![1, 2, 3, 4, 5];// 定义方式3let mut v3: Vec<i32> = Vec::with_capacity(5);// 定义方式4let mut v4: Vec<i32> = vec![1; 5]; // [1,1,1,1,1]// 增加元素v1.push(1);// 删除元素,删除操作其实在任何工作场景中用的都很少// pop删除并返回vec的最后一个元素,返回值是一个Option,这个java/scala中的optional// 的含义一致,都是表示也许有也许没有的意思let last = v2.pop();// remove删除指定索引位置的元素,并将该元素后面的元素左移let idx0 = v2.remove(0);// 修改元素v1[0] = 2;// 查询元素println!("v1[0]={}", v1[0]);match v1.get(0) {Some(x) => println!("x={}", x),None => println!("nothing"),}
}

Option的源码如下:

pub enum Option<T> {/// No value.#[lang = "None"]#[stable(feature = "rust1", since = "1.0.0")]None,/// Some value of type `T`.#[lang = "Some"]#[stable(feature = "rust1", since = "1.0.0")]Some(#[stable(feature = "rust1", since = "1.0.0")] T),
}

HashMap

映射表,也是在工作中使用频率极高的一种容器。用法在代码中,HashMap并没有像vec!一样的初始化方法,还记得加上感叹号是宏么,也许在后面我们学习到宏的时候,我们自己实现一个hashmap!,我自己都不确定能不能写到那时候,工作时间越久,越感觉世事无常,一切过往,皆是序章,但愿到时候还有机会和大家可以分享一下hashmap!。

use std::collections::HashMap;fn main() {// 定义方式1let mut h1: HashMap<String, i32> = HashMap::new();// 定义方式2let mut h2: HashMap<String, String> = HashMap::with_capacity(5);// 增/改// insert 如果插入的key不存在,插入成功,返回None,如果插入的key存在,更新成功,返回旧值let r1: Option<i32> = h1.insert("a".to_string(), 1);match r1 {Some(x) => println!("x = {}", x),None => println!("r1 is None"),}let r2: Option<i32> = h1.insert("a".to_string(), 2);match r2 {Some(x) => println!("x = {}", x),None => println!("r2 is None"),}// 删// remove 成功返回旧值 不存在该key则返回Nonelet r3 = h1.remove("a");match r3 {Some(x) => println!("x = {}", x),None => println!("r3 is None"),}// 查h1.insert("b".to_string(), 2);println!("h1[b]={}", h1["b"]);match h1.get("b") {Some(x) => println!("x = {}", x),None => println!("None"),}
}

其他

rust中还有一些别的容器类型,下图列举了rust的collections中的一些容器类型,大家可以在需要使用时自行学习了解

//! * Sequences: [`Vec`], [`VecDeque`], [`LinkedList`]
//! * Maps: [`HashMap`], [`BTreeMap`]
//! * Sets: [`HashSet`], [`BTreeSet`]
//! * Misc: [`BinaryHeap`]

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

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

相关文章

高级数据结构——hash表与布隆过滤器

文章目录 hash表与布隆过滤器1. hash函数2. 选择hash函数3. 散列冲突3.1 负载因子3.2 冲突解决3. STL中的散列表 4. 布隆过滤器4.1 背景1. 应用场景2. 常见的处理场景&#xff1a; 4.2 布隆过滤器构成4.3 原理4.4 应用分析4.5 要点 5. 分布式一致性hash5.1 缓存失效问题 6. 大数…

xcode-select: error: tool ‘xcodebuild‘ requires Xcode, but active developer

打开 .sh 文件所在的终端窗口&#xff0c;执行终端命令&#xff1a;sh 文件名.sh&#xff0c;出现如下错误&#xff1a; 解决办法&#xff1a;

java中volatile 类型变量提供什么保证?能使得一个非原子操作变成原子操作吗?

大家好&#xff0c;我是锋哥。今天分享关于【java中volatile 类型变量提供什么保证&#xff1f;能使得一个非原子操作变成原子操作吗&#xff1f;】面试题。希望对大家有帮助&#xff1b; java中volatile 类型变量提供什么保证&#xff1f;能使得一个非原子操作变成原子操作吗&…

candence : 通孔焊盘、插装器件封装绘制

通孔焊盘、插装器件封装绘制 以2.54mm 2x10的 排针为例绘制封装 一、 flash 热风焊盘制作 1、新建 2、选择 flash SYMBOL&#xff0c;并设置保存路径 3、add flash 具体参数 花焊盘参数 Inner diameter 通孔直径(1.0mm) 圆形补偿值(0.4mm)1.4mm Outer diameter 通孔直径…

VSCode设置

打开设置页 VSCode打开配置页面&#xff0c;有多种方式&#xff1a; a. 点击左上角 File(文件) -> Preferences (首选项) -> Settings(设置)。 b. 使用快捷键 Ctrl ,(Windows) 或 Cmd ,(Mac)。 c. 点击左下角 Manage(管理) -> Settings(设置)。 VSCode设置页面打…

SpringMVC数据校验、数据格式化处理、国际化设置

SpringMVC数据校验、数据格式化处理、国际化设置 1.数据验证 &#xff08;1)使用JSR-303验证框架 JSR&#xff08;Java Specification Requests&#xff09;&#xff0c;意思是Java 规范提案。JSR-303是JAVA EE 6中的一项子规范&#xff0c;叫做Bean Validation。JSR 303&am…

加速 AI 创新:引入 Elastic AI 生态系统

作者&#xff1a;来自 Elastic Alyssa Fitzpatrick, Steve Kearns 生成式人工智能 (Generative AI - GenAI) 正在改变我们所熟知的商业格局。为了简化和加速开发人员构建和部署检索增强生成 (retrieval augmented generation - RAG) 应用程序的方式&#xff0c;Elastic 自豪地宣…

SpringSecurity 鉴权认证入门讲解

​ Spring Security 是 Spring 家族中的一个安全管理框架。相比与另外一个安全框架Shiro&#xff0c;它提供了更丰富的功能&#xff0c;社区资源也比Shiro丰富。 ​ 一般来说中大型的项目都是使用SpringSecurity 来做安全框架。小项目有Shiro的比较多&#xff0c;因为相比与Sp…

# ubuntu 安装的pycharm不能输入中文的解决方法

ubuntu 安装的pycharm不能输入中文的解决方法 一、问题描述&#xff1a; 当在 ubuntu 系统中&#xff0c;安装了 pycharm&#xff08;如&#xff1a;pycharm2016, 或 pycharm2018&#xff09;,打开 pycharm 输入代码时&#xff0c;发现不能正常输入中文&#xff0c;安装的搜狗…

小白进!QMK 键盘新手入门指南

经常玩键盘的伙伴应该都知道&#xff0c;现在的键盘市场可谓是百花齐放&#xff0c;已经不是之前的单一功能产品化时代。我们可以看到很多诸如&#xff1a;机械轴键盘、磁轴键盘、光轴键盘、电感轴键盘&#xff0c;以及可能会上市的光磁轴键盘&#xff0c;更有支持屏幕的、带旋…

EXCEL 或 WPS 列下划线转驼峰

使用场景&#xff1a; 需要将下划线转驼峰&#xff0c;直接在excel或wps中第一行使用公式&#xff0c;然后快速刷整个列格式即可。全列工下划线转为格式&#xff0c;使用效果如下&#xff1a; 操作步骤&#xff1a; 第一步&#xff1a;在需要显示驼峰的一列&#xff0c;复制以…

微信小程序:vant组件库安装步骤

前言&#xff1a;在微信小程序中引用vant组件报错&#xff0c;提示路径不存在&#xff0c;这很有可能是因为没有安装构建vant组件库导致。下面是我整理的安装vant组件库的步骤: 第一步&#xff1a;安装node.js(执行完第一步请重启小程序) 具体步骤请看链接&#xff1a;node.js…

vue3【实战】切换全屏【组件封装】FullScreen.vue

效果预览 原理解析 使用 vueUse 里的 useFullscreen() 实现 代码实现 技术方案 vue3 vite UnoCSS vueUse 组件封装 src/components/FullScreen.vue <template><component:is"tag"click"toggle":class"[!isFullscreen ? i-ep:full-sc…

GPIO相关的寄存器(重要)

目录 一、GPIO相关寄存器概述 二、整体介绍 三、详细介绍 1、端口配置低寄存器&#xff08;GPIOx_CRL&#xff09;&#xff08;xA...E&#xff09; 2、端口配置高寄存器&#xff08;GPIOx_CRH&#xff09;&#xff08;xA...E&#xff09; 3、端口输入数据寄存器&#xff…

【Hadoop实训】Hive 数据操作②

延续上一篇文章&#xff0c;不懂的宝子们请看以下链接&#xff1a; 【Hadoop实训】Hive 数据操作①-CSDN博客 目录 一、Group by 语句 (1)、计算emp表每个部门的平均工资 (2)、计算emp表每个部门中每个岗位的最高工资 二、Having 语句 (1)、求每个部门的平均工资 (2)、求每个…

Vulhub漏洞复现---solr---CVE-2019-17558

漏洞描述 Apache Solr 5.0.0到Apache Solr 8.3.1容易受到通过VelocityResponseWriter执行的远程代码的攻击。Velocity模板可以通过configset ’ Velocity / 目录中的Velocity模板或作为参数提供。用户定义的configset可以包含可呈现的、潜在的恶意模板。参数提供的模板在默认情…

ADS学习笔记 5. 微带天线设计

基于ADS2023 update2 参考书籍&#xff1a;卢益锋老师《ADS射频电路设计与仿真学习笔记》 更多笔记&#xff1a;ADS学习笔记 1. 功率放大器设计ADS学习笔记 2. 低噪声放大器设计ADS学习笔记 3. 功分器设计ADS学习笔记 4. 微带分支定向耦合器设计 目录 0、设计指标 1、微带…

【JAVA】使用IDEA创建maven聚合项目

【JAVA】使用IDEA创建maven聚合项目 1.效果图 2.创建父模块项目 2.1删除父模块下面的src目录以及不需要的maven依赖 3创建子模块项目 3.1右击父模块项目选择Module… 3.2创建子模块 3.3删除子模块下不需要的maven依赖 4.子模块创建完成后引入SpringBoot依赖启动项目

一文详细深入总结服务器选型

1. 题记&#xff1a; 服务器选型工作是项目规划检讨的一项非常重要的工作&#xff0c;本文详细深入总结服务器选型。 2. 服务器基础知识概览 2.1 服务器的定义与功能 2.1 .1 定义 服务器是一种高性能计算机&#xff0c;其设计目的是在网络中提供服务。它可以处理来自多个客…

如何编译 Cesium 源码

如何编译 Cesium 源码 Cesium 是一个开源的 JavaScript 库&#xff0c;用于构建 3D 地球和地图应用程序。它提供了一套强大的 API 和工具&#xff0c;使开发者能够创建丰富的地理空间应用。本文将指导您如何从 GitHub 下载 Cesium 源码&#xff0c;并在本地进行编译。 TilesB…