• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Rust学习——常见集合(Vec、String、HashMap)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

一、vector
特点:一个挨着一个地存储一系列数量可变的值。
只能存储相同类型的值。
它在内存中彼此相邻地排列所有的值。

常见场景:文件中的文本,购物车中商品的价格。

vector是用泛型实现的。
let v: Vec = Vec::new();

let v = vec![1, 2, 3,];

使用push方法更新值。
释放vec时会丢弃其所有元素。

如何读取vector元素值?

  1. 索引语法,即通过index访问,类似数组
  2. get方法,返回一个Option<&T>,所以通过match运算符去处理。

第一种获取元素的方法需要注意越位,会引起程序崩溃。即panic。
第二种则能很友好的在None的情况处理。

由于在同一作用域下不能同时存在可变和不可变引用,所以在获取vector元素的不可变引用时尝试在vector末尾增加元素,则会抛出异常。

在使用+=运算符之前必先用解引用运算符(*)获取i中的值。

vector + 枚举可以在vector中存放不同类型的数据。

二、字符串
特点:字符的集合。String。

let s = "initial contents".to_string();
// equal to
let s = String::from("initial contents");

Rust中字符串使用的是UTF-8编码。

如何更新字符串?
1. push_str,该方法不会获取到入参的所有权
2. push,该方法入参仅支持单个字符
3. + 运算符,String只能和&str 相加。
4. format! 宏,对于复杂的字符串处理,使用该方法最方便了,并且不会获取任何参数的所有权

当把一个类型为String的字符串取引用,并与类型为String的字符串相加时,第一个类型会被Deref强制转换成&str。

let s1 = String::from("tic");
let s2 = String::from("tac");
let s3 = String::from("toe");
let s = format!("{}-{}-{}", s1, s2, s3);

Rust字符串String本质上是一个Vec的封装。

Rust中可以用三种方式可以理解字符串:

  1. 字节
  2. 标量值
  3. 字形簇(字母)

遍历字符串的方法:
1. .chars()
2. .bytes()
3. 获取字形簇可考虑crate.io上三方库

三、hash map
特点:允许将值与一个特定的键key关联,使用map数据结构。

生成一个map的方式:
use std::collections ::HashMap;
let mut scores = HashMap::new();

另一种方式:
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();

通过.get(key)方法可返回一个Option<&T>,所以通过match运算符去处理。

类似于 vector,hash map 是同质的:所有的键必须是相同类型,值也必须都是相同类型

hash map与所有权
如果将值的引用插入哈希 map,这些值本身将不会被移动进哈希 map。但是这些引用指向的值必须至少在哈希 map 有效时也是有效的。

更新hash map

  1. 覆盖:
    1. 再次插入相同的key,即覆盖
  2. 只在键无对应值时插入:
    1. 使用.entry(key).or_insert(value)方法
    2. 使用此方法可快速依据可迭代结构更新hash map,并获取具体的键值
  3. 在旧值基础上更新值:
    1. 将一个键值取出来后,使用*号解引用,然后进行赋值操作即可完成更新

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
MATLAB数值计算与数据分析(1)发布时间:2022-07-18
下一篇:
经典功率谱估计及Matlab仿真发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap