在 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 {
//原来的值都加上50
println!("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),
];
}