Rust 集合常用方法大揭秘

本文全面介绍 Rust 集合常用方法,通过示例代码让你轻松掌握集合操作。

1. Vec 常用方法

1.1 创建和初始化

// 创建空 Vec
let mut vec1: Vec<i32> = Vec::new();

// 使用宏创建
let mut vec2 = vec![1, 2, 3];

// 预分配容量
let mut vec3 = Vec::with_capacity(10);

在 Rust 中,Vec 是一种动态数组,可存储相同类型的元素。Vec::new() 用于创建一个空的 Vec,其类型需要显式指定。使用 vec! 宏可以方便地创建并初始化一个 Vec。而 Vec::with_capacity 则可以预先分配一定的容量,避免后续添加元素时频繁的内存重新分配。

1.2 添加元素

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

// 在末尾添加元素
vec.push(4); // [1, 2, 3, 4]

// 在指定位置插入元素
vec.insert(1, 5); // [1, 5, 2, 3, 4]

// 拼接另一个 Vec
vec.extend([6, 7].iter().copied()); // [1, 5, 2, 3, 4, 6, 7]

push 方法用于在 Vec 的末尾添加一个元素。insert 方法可以在指定的索引位置插入一个元素,后续元素会依次后移。extend 方法则可以将另一个可迭代对象中的元素添加到当前 Vec 的末尾。

1.3 删除元素

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

// 移除并返回最后一个元素
let last = vec.pop(); // Some(5), vec = [1, 2, 3, 4]

// 移除指定位置元素
let removed = vec.remove(1); // 2, vec = [1, 3, 4]

// 清空 Vec
vec.clear(); // []

pop 方法会移除并返回 Vec 的最后一个元素,如果 Vec 为空,则返回 Noneremove 方法用于移除指定索引位置的元素,并返回该元素。clear 方法会清空 Vec 中的所有元素。

1.4 访问元素

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

// 通过索引访问
let first = vec[0]; // 1

// 安全访问
let second = vec.get(1); // Some(&2)

// 获取第一个和最后一个元素
let first = vec.first(); // Some(&1)
let last = vec.last(); // Some(&5)

可以使用 [] 操作符直接通过索引访问 Vec 中的元素,但如果索引越界,会导致程序崩溃。get 方法则提供了一种安全的访问方式,它返回一个 Option 类型,如果索引有效,则返回 Some(&element),否则返回 Nonefirstlast 方法分别用于获取 Vec 的第一个和最后一个元素,同样返回 Option 类型。

1.5 遍历元素

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

// 不可变遍历
for num in &vec {
    println!("{}", num);
}

// 可变遍历
let mut vec = vec![1, 2, 3];
for num in &mut vec {
    *num += 1;
}

// 使用迭代器方法
let sum: i32 = vec.iter().sum();

可以使用 for 循环对 Vec 进行遍历。如果只需要读取元素,可以使用不可变引用 &vec。如果需要修改元素,则使用可变引用 &mut vec。此外,Vec 还实现了迭代器 trait,可以使用迭代器方法,如 sum 来对元素进行求和。

2. HashMap 常用方法

2.1 创建和初始化

use std::collections::HashMap;

// 创建空 HashMap
let mut map1: HashMap<&str, i32> = HashMap::new();

// 使用宏创建
let mut map2 = HashMap::from([
    ("a", 1),
    ("b", 2),
    ("c", 3),
]);

HashMap 是 Rust 中的哈希表,用于存储键值对。要使用 HashMap,需要先引入 std::collections::HashMap。可以使用 HashMap::new() 创建一个空的 HashMap,并显式指定键和值的类型。也可以使用 HashMap::from 宏来创建并初始化一个 HashMap

2.2 添加和更新元素

let mut map = HashMap::new();

// 插入键值对
map.insert("one", 1);
map.insert("two", 2);

// 更新值
map.insert("one", 11); // 覆盖原有值

// 只在键不存在时插入
map.entry("three").or_insert(3);

insert 方法用于插入或更新键值对。如果键已经存在,新的值会覆盖旧的值。entry 方法提供了一种更灵活的插入方式,or_insert 方法会检查键是否存在,如果不存在则插入指定的值。

2.3 删除元素

let mut map = HashMap::from([
    ("a", 1),
    ("b", 2),
    ("c", 3),
]);

// 移除指定键
let value = map.remove("b"); // Some(2)

// 清空 HashMap
map.clear();

remove 方法用于移除指定键的键值对,并返回该键对应的值。如果键不存在,则返回 Noneclear 方法会清空 HashMap 中的所有键值对。

2.4 访问元素

let map = HashMap::from([
    ("a", 1),
    ("b", 2),
    ("c", 3),
]);

// 通过键访问
let a = map.get("a"); // Some(&1)

// 检查键是否存在
let has_a = map.contains_key("a"); // true

// 获取所有键或值
let keys: Vec<_> = map.keys().collect();
let values: Vec<_> = map.values().collect();

可以使用 get 方法通过键来访问 HashMap 中的值,返回一个 Option 类型。contains_key 方法用于检查指定的键是否存在于 HashMap 中。keysvalues 方法分别用于获取 HashMap 中所有的键和值的迭代器,可以使用 collect 方法将其收集到一个 Vec 中。

2.5 遍历元素

let map = HashMap::from([
    ("a", 1),
    ("b", 2),
    ("c", 3),
]);

// 遍历键值对
for (key, value) in &map {
    println!("{}: {}", key, value);
}

// 可变遍历
let mut map = HashMap::from([
    ("a", 1),
    ("b", 2),
]);
for (_, value) in &mut map {
    *value += 10;
}

可以使用 for 循环对 HashMap 进行遍历。不可变遍历会返回键值对的不可变引用,可变遍历则返回可变引用。在可变遍历中,可以修改值但不能修改键。

3. HashSet 常用方法

3.1 创建和初始化

use std::collections::HashSet;

// 创建空 HashSet
let mut set1: HashSet<i32> = HashSet::new();

// 使用宏创建
let mut set2 = HashSet::from([1, 2, 3]);

HashSet 是 Rust 中的哈希集合,用于存储唯一的元素。使用时需要引入 std::collections::HashSet。可以使用 HashSet::new() 创建一个空的 HashSet,并显式指定元素类型。也可以使用 HashSet::from 宏来创建并初始化一个 HashSet

3.2 添加元素

let mut set = HashSet::new();

// 添加元素
set.insert(1);
set.insert(2);

insert 方法用于向 HashSet 中添加元素。如果元素已经存在,则不会重复添加,并且 insert 方法会返回 false;如果元素不存在,则添加成功并返回 true

3.3 删除元素

let mut set = HashSet::from([1, 2, 3]);

// 移除元素
let removed = set.remove(&2); // true

remove 方法用于移除 HashSet 中的指定元素。如果元素存在,则移除并返回 true;如果元素不存在,则返回 false

3.4 检查元素是否存在

let set = HashSet::from([1, 2, 3]);

// 检查元素是否存在
let has_2 = set.contains(&2); // true

contains 方法用于检查指定的元素是否存在于 HashSet 中,返回一个布尔值。

3.5 遍历元素

let set = HashSet::from([1, 2, 3]);

// 遍历元素
for num in &set {
    println!("{}", num);
}

可以使用 for 循环对 HashSet 进行遍历,遍历顺序是不确定的。

通过以上介绍,你已经了解了 Rust 中 VecHashMapHashSet 这三种常用集合的常用方法。掌握这些方法可以让你更加高效地使用 Rust 进行开发。

你可能感兴趣的:(rust,算法,开发语言)