在 Rust 程序中被广泛使用的集合: :::warning
- vector 允许我们一个挨着一个地储存一系列数量可变的值
- 字符串(string)是字符的集合。我们之前见过 String 类型,不过在本章我们将深入了解。
哈希 map(hash map)允许我们将值与一个特定的键(key)相关联。这是一个叫做 map 的更通用的数据结构的特定实现。 ::: https://doc.rust-lang.org/std/collections/index.html
应用场景
在以下情况下使用Vec:
您希望收集项目,以便稍后处理或发送到其他位置,并且不关心所存储的实际值的任何属性。
- 您需要一系列元素按特定顺序排列,并且只会追加到(或接近)末尾。
- 你想要一个堆栈。
- 您需要一个可调整大小的数组。
-
在以下情况下使用VecDeque:
您需要一个支持在序列两端高效插入的 Vec。
- 您需要一个队列。
-
在以下情况下使用LinkedList:
- 您希望有效地拆分和追加列表。
-
在以下情况下使用HashMap:
您希望将任意键与任意值相关联。
- 您需要缓存。
-
在以下情况下使用 BTreeMap:
您希望地图按其键排序。
- 您希望能够按需获取一系列条目。
- 您对最小或最大的键值对感兴趣。
-
Map中任何一个的Set变体:
您只想记住您见过哪些键。
- 没有有意义的值可以与密钥关联。
-
在以下情况下使用二进制Heap:
你想存储一堆元素,但只想在任何给定时间处理“最大”或“最重要”的元素。
-
vec
https://doc.rust-lang.org/std/vec/index.html
一种连续的可增长数组类型,其内容为 堆分配的内容,编写为 。Vec。 新建 vector
let v: Vec<i32> = Vec::new();
let v = vec![1, 2, 3];
增加元素
fn main() {let mut v = Vec::new();v.push(5);v.push(6);v.push(7);v.push(8);}
弹出元素
let mut v = vec![1, 2];let two = v.pop();
get读取 vector
pub fn getvector_demo1() {println!();let v = vec![1, 2, 3, 4, 5];//使用 & 和 [] 返回一个引用let third: &i32 = &v[2];println!("The third element is {}", third);//使用 get 方法以索引作为参数来返回一个 Option<&T>match v.get(2) {Some(third) => println!("The third element is {}", third),None => println!("There is no third element."),}}
我们使用索引值 2 来获取第三个元素,索引是从 0 开始的。
遍历 vector
fn for_vector_demo1() {let v = vec![100, 32, 57];for i in &v {println!("for_vector_demo1 i is {}", i);}}
pub fn for_mutvector_demo() {let mut v = vec![100, 32, 57];for i in &mut v {//原来数组对应的项的值都加上50*i += 50;//println!("for_mutvector_demo i is {}", *i);}for i in &v {//原来的值都加上50println!("for_mutvector_demo i is {}", i);}}
储存多种类型
fn vector_enum_demo() {enum SpreadsheetCell {Int(i32),Float(f64),Text(String),}let row = vec![SpreadsheetCell::Int(3),SpreadsheetCell::Text(String::from("blue")),SpreadsheetCell::Float(10.12),];}
