标准库——集合

Rust的标准集合都被存放在std::collections模块中。

其中包括了:

  • Sequences: Vec, VecDeque, LinkedList
  • Maps: HashMap, BTreeMap
  • Sets: HashSet, BTreeSet
  • Misc: BinaryHeap

动态数组

Rust的动态数组类似于Java中的List。长度可变。动态数组是一种基于堆内存申请的连续动态数据类型,拥有 O(1) 时间复杂度的索引、压入(push)、弹出(pop)。

创建空Vec

new方法

let v: Vec<i32> = Vec::new();

使用宏创建空Vec

let v: Vec<i32> = vec![];

创建包含5个元素的Vec

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

创建十个0

let v = vec![0; 10];

vector被销毁则元素也被销毁

vector中元素的什么周期与vector相同,也即vector被销毁时,其元素也会被销毁。

获取元素

[]或get()

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

let third: &i32 = &v[2];
let third: Option<&i32> = v.get(2);

let does_not_exist = &v[100];   // 越界异常panic!
let does_not_exist = v.get(100);  // 返回Option的NONE值

创建可变的Vec,并压入元素3

push方法

let mut v = vec![1, 2];
v.push(3);

创建拥有两个元素的Vec,并弹出一个元素

pop方法

let mut v = vec![1, 2];
let two = v.pop();

创建包含三个元素的可变Vec,并索引一个值和修改一个值

let mut v = vec![1, 2, 3];
let three = v[2];  // copy
v[1] = v[1] + 5;

这段代码可以运行,let three = v[2]; v[2]的值被copy给了three。

但如果是借用就会运行错误。如下:

let mut v = vec![1, 2, 3];
let three = &v[2];   // borrow then copy.
v[1] = v[1] + 5;    // v has been borrowed.

因为mut变量不能在被借用的同时还被修改,所以,必须这样才可以:

let mut v = vec![1, 2, 3];
{
    let three = &v[2];  // borrow then copy.
}
v[1] = v[1] + 5;

使用枚举,让vector可以容纳不同类型

由于vector是泛型的,所有vector一般只能填入一种类型。若需要同时存储多种类型的值,可以利用Rust的枚举的性质。

enum VectorValue {
    Int(i32),
    Float(f64),
    Text(String),
}

// 拥有不同类型的vector
let row = vec![
    VectorValue::Int(3),
    VectorValue::Text(String::from("blue")),
    VectorValue::Float(10.12),
];

HashMap

创建HashMap

use std::collections::HashMap;

let mut scores = HashMap::new();

insert

插入数据。

scores.insert(String::from("Blue"), 10);
scores.insert(String::from("Yellow"), 50);

zip

拉链函数,将两个List中的元素配对成一个HashMap。

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();

其中HashMap<_, _>表示HashMap接受任意类型的key与value。

results matching ""

    No results matching ""