iis7架设网站教程,什么网站出项目找人做,网站制作公司 沧州,国内大宗商品交易平台有哪些目录 前言
Vector
HashMap
其他 前言
上一课介绍了rust的变量和常见的数据类型#xff0c;走马观花的看了一下rust常见的变量和数据类型#xff0c;这些都是rust的基本语法#xff0c;整理出来只是起一个引子的效果#xff0c;基本语法多练习才可以熟练。这一课继续介绍…目录 前言
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: Veci32 Vec::new();// 定义方式2let mut v2: Veci32 vec![1, 2, 3, 4, 5];// 定义方式3let mut v3: Veci32 Vec::with_capacity(5);// 定义方式4let mut v4: Veci32 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 OptionT {/// 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: HashMapString, i32 HashMap::new();// 定义方式2let mut h2: HashMapString, String HashMap::with_capacity(5);// 增/改// insert 如果插入的key不存在插入成功返回None如果插入的key存在更新成功返回旧值let r1: Optioni32 h1.insert(a.to_string(), 1);match r1 {Some(x) println!(x {}, x),None println!(r1 is None),}let r2: Optioni32 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]