vec基础

具体细节在代码中,注意引用的技巧,一般使用get()获取元素,这样如果越过边界,返回的是None

fn main() {let v = vec![1, 2, 3, 4, 5];let x = v.get(2);  //match x {Some(3) => println!("OK"),None => println!("No"),_ => println!("Nothing"),}for i in &v {  // 使用引用的方式遍历,去掉&是基于值的,每个都要复制一遍println!("{}", i);}let mut v1 = vec![1, 2, 3, 4, 5];for i in &mut v1 {*i += 10;  // 必须要解引用}for i in &v1 {println!("{}", i);}// 通过枚举绑定的形式,可以让一个vec存储多个类型的值,使用match的方式获取enum Cell {Int(i32),Float(f64),Text(String),}let mut rows: Vec<Cell> = Vec::new();rows.push(Cell::Int(10));rows.push(Cell::Float(1.35));rows.push(Cell::Text(String::from("hello world !")));for i in & rows {match i {Cell::Int(val) => println!("{}", val),Cell::Float(val) => println!("{}", val),Cell::Text(val) => println!("{}", val),}}
}

注意一个易错点,vec当元素不够的时候,会重新申请内存,然后把之前的元素复制到新内存中;这样,如果之前有引用指向某个元素,那么会报错。错误代码实例:

fn main() {let mut v = vec![3; 3];let r = &v[0];v.push(1);  // 重新申请内存,导致下一句报错println!("r = {}", r);
}

字符串类型

fn main() {// 初始化的几个方式let mut s0 = String::new();let data = "initial contents";let s1 = data.to_string();let s2 = "hello world !".to_string();let s3 = String::from("hello world !");// 拼接的方式let s4 = "hello".to_string();let s5 = String::from("world");let s6 = String::from("!");// +拼接只是针对&str而言的let s7 = s4 + " " + &s5 + " " + &s6;  // 此时的s4已经无效了println!("s7 = {}", s7);  let s4 = "hello".to_string();  // 重新定义s4let s8 = format!("{} {} {}", s4, s5, s6);  // format拼接,都是有效的println!("s8 = {}", s8);
}

字符串不能基于下标遍历,因为不同字符的编码是不一样的,rust直接在语言层面就禁止了。遍历只能通过for循环的形式进行,代码实例:

fn main() {let s = String::from("hello, 我来自中国,Indian नमस्त");for c in s.chars() {  // 遍历每个实际的字符println!("{}", c);}for c in s.bytes() {  // 遍历每个编码println!("{}", c);}
}

map类型

这里仅仅介绍HashMap的结构,基于哈希算法的。先给出几个基本的操作:

use std::collections::HashMap;fn main() {// 新建let mut nums = HashMap::new();// 简单插入nums.insert(1, String::from("one"));nums.insert(2, String::from("two"));nums.insert(3, String::from("three"));nums.insert(4, String::from("four"));// 删除nums.remove(&4);// 基于引用的遍历for (k, v) in &mut nums {println!("key = {}, value = {}", k, v);}// 基于get获取元素let v = nums.get(&1); match v {  // 必须使用这种方式获取对应的值Some(val) => println!("{}", val),None => println!("No key !"),}
}

注意HashMap所有权的问题,一旦一个元素insert进入容器,那么对应的所有权就归容器所有了

还有一个基于veccollect方法的构造方式,在这里给出一个代码实例:

use std::collections::HashMap;let teams  = vec![String::from("Blue"), String::from("Yellow")];
let initial_scores = vec![10, 50];let scores: HashMap<_, _> = teams.iter().zip(initial_scores.iter()).collect();

试探性插入,如果元素存在则不插入,给出代码实例:

use std::collections::HashMap;let mut scores = HashMap::new();
scores.insert(String::from("Blue"), 10);scores.entry(String::from("Yellow")).or_insert(50);
scores.entry(String::from("Blue")).or_insert(50);println!("{:?}", scores);

rust笔记8 collections基础相关推荐

  1. rust笔记2 OwnerShip基础概念

    首先,要搞清楚栈内存和堆内存对应了那些类型.rust的整型.浮点型.bool型.字面字符串型和tuple型都是栈内存上的:如果使用=,那么这些数据会拷贝一份新的内容. 然后,要了解rust的变量作用域 ...

  2. 【Java 系列笔记】语法基础 + Spring + Spring MVC + SpringBoot + 数据结构

    Java 强化笔记目录 Java 语言基础 Java 架构师体系课程 一些课程 前端笔记:前端学习笔记 Java 语言基础 回头补基础(此基础非小白)系列,学校教的其实真的就是一些皮毛而已,怕是连门都 ...

  3. Stream 流 【学习笔记】Java 基础

    若文章内容或图片失效,请留言反馈. 部分素材来自网络,若不小心影响到您的利益,请联系博主删除. 写这篇博客旨在制作笔记,方便个人在线阅览,巩固知识,无其他用途. 学习视频 [黑马 Java 基础教程] ...

  4. 《Java并发编程实践》学习笔记之一:基础知识

    <Java并发编程实践>学习笔记之一:基础知识 1.程序与进程 1.1 程序与进程的概念 (1)程序:一组有序的静态指令,是一种静态概念:  (2)进程:是一种活动,它是由一个动作序列组成 ...

  5. [Java入门笔记] 面向对象编程基础(二):方法详解

    2019独角兽企业重金招聘Python工程师标准>>> 什么是方法? 简介 在上一篇的blog中,我们知道了方法是类中的一个组成部分,是类或对象的行为特征的抽象. 无论是从语法和功能 ...

  6. Python 数据分析与展示笔记1 -- Numpy 基础

    Python 数据分析与展示笔记1 – NumPy 基础 Python 数据分析与展示系列笔记是笔者学习.实践Python 数据分析与展示的相关笔记 课程链接: Python 数据分析与展示 参考文档 ...

  7. MySQL 笔记2 -- MySQL 基础

    MySQL 笔记2 – MySQL 基础 MySQL 系列笔记是笔者学习.实践MySQL数据库的笔记 课程链接: MySQL 数据库基础入门教程 参考文档: MySQL 官方文档 一.MySQL 简介 ...

  8. Maven-学习笔记06【基础-Maven工程servlet实例】

    Java后端 学习路线 笔记汇总表[黑马程序员] 黑马程序员(腾讯微云)Maven基础讲义.pdf Maven-学习笔记01[基础-Maven基本概念] Maven-学习笔记02[基础-Maven的安 ...

  9. Maven-学习笔记05【基础-使用骨架创建Maven的Java工程】

    Java后端 学习路线 笔记汇总表[黑马程序员] 黑马程序员(腾讯微云)Maven基础讲义.pdf Maven-学习笔记01[基础-Maven基本概念] Maven-学习笔记02[基础-Maven的安 ...

最新文章

  1. Java中的对象和包
  2. Rstudio 实现 爬虫 文本分词 个性化词云设计--我爱中国我爱党
  3. Java中的I/O模型总结(八股文自述)
  4. python补课费用_学习python阶段小总结
  5. 线上Java应用排查和诊断规范
  6. 关于WCF中间层服务器端DTO属性更新如何同步回仓储实体的处理方式
  7. php总是报错,php - 简单工厂模式中的问题,总是报错
  8. PUSHAD和POPAD,以及PUSHA和POPA
  9. Java字符串找出4个字节长度的字符
  10. asp Upload
  11. 我点击一个单选框时另外一个单选框里的内容属性隐藏掉_一个交通工程专业硕士研究生的总结与独白(二):交通生成预测及TransCAD操作...
  12. Linux中的提权操作
  13. EasyUI remote ajax方式提交验证
  14. AdaBoost(1)
  15. paip.python错误解决15
  16. LS-DYNA基础理论
  17. gmail谷歌邮箱开启SMTP
  18. hdu 4125 Moles
  19. [转帖]国之魂,民之魂(硬骨头六连16勇士的最后一张照片)
  20. c语言输入任意长度字符串,读取不定长字符串输入

热门文章

  1. hexo搭建个人博客_hexo 搭建个人博客
  2. python——pandas库之Series数据结构基础
  3. nlp-tutorial代码注释3-2,LSTM简介
  4. 第八届“图灵杯”NEUQ-ACM程序设计竞赛个人赛——A题 切蛋糕
  5. ~~试除法求所有约数(附模板题)
  6. Gitee搭建自己的图床
  7. 使用window.performance对应用性能监测
  8. 微信小程序开发——小程序分享转发
  9. python包管理(pip, 源码)
  10. 关于scanf 与 cin gets(),getline()......输入输出字符串的区别