《Rust快速入门》8. 错误处理
集合类型:Rust 中的字符串、数组、向量、哈希映射和集合
Rust 提供了多种集合类型来存储和操作数据。这些集合类型包括字符串(String
和字符串切片)、数组与切片、向量(Vec
)、哈希映射(HashMap
)和集合(HashSet
)。本文将详细介绍这些集合类型的定义、使用和常见操作,并通过完整的代码示例和详尽的指导过程帮助读者深入理解这些概念。
1. 字符串:String
和字符串切片
1.1 String
类型
String
是 Rust 中的动态字符串类型,存储在堆上,可以动态增长。
示例 1:创建和修改 String
|
|
解释:
String::new()
创建一个空的String
。String::from("hello")
从字符串字面量创建String
。push_str
和push
方法用于修改String
。
示例 2:字符串拼接
|
|
解释:
+
运算符用于拼接字符串,注意s1
的所有权会被转移。
1.2 字符串切片
字符串切片(&str
)是对字符串的引用,通常用于函数参数。
示例 3:使用字符串切片
|
|
解释:
&s[0..5]
获取字符串s
的前 5 个字符的切片。- 字符串切片是只读的,不能修改。
2. 数组与切片
2.1 数组
数组是固定长度的集合,所有元素的类型必须相同。
示例 4:定义和使用数组
|
|
解释:
let a = [1, 2, 3, 4, 5];
定义了一个包含 5 个元素的数组。- 数组的长度是固定的,不能动态增长。
2.2 切片
切片是对数组或向量的引用,可以动态指定长度。
示例 5:使用切片
|
|
解释:
&a[1..3]
获取数组a
的索引 1 到 3(不包括 3)的切片。- 切片是只读的,不能修改。
3. 向量:Vec
类型
向量是动态数组,可以动态增长和缩小。
3.1 创建和修改向量
示例 6:创建和修改向量
|
|
解释:
Vec::new()
创建一个空的向量。vec![1, 2, 3]
使用宏创建包含初始值的向量。push
和pop
方法用于修改向量。
3.2 访问向量元素
示例 7:访问向量元素
|
|
解释:
v[0]
通过索引访问向量元素,如果索引越界会导致程序崩溃。v.get(1)
通过get
方法访问向量元素,返回Option
类型。
4. 哈希映射:HashMap
哈希映射是一种键值对集合,允许通过键快速查找值。
4.1 创建和修改哈希映射
示例 8:创建和修改哈希映射
|
|
解释:
HashMap::new()
创建一个空的哈希映射。insert
方法用于插入或更新键值对。entry
方法用于检查键是否存在,如果不存在则插入。
4.2 访问哈希映射的值
示例 9:访问哈希映射的值
|
|
解释:
get
方法用于通过键获取值,返回Option
类型。
5. 集合:HashSet
集合是一种无序且不重复的元素集合。
5.1 创建和修改集合
示例 10:创建和修改集合
|
|
解释:
HashSet::new()
创建一个空的集合。insert
方法用于插入元素。contains
方法用于检查元素是否存在。remove
方法用于移除元素。
5.2 集合操作
集合支持并集、交集、差集等操作。
示例 11:集合操作
|
|
解释:
union
方法返回两个集合的并集。intersection
方法返回两个集合的交集。difference
方法返回两个集合的差集。
6. 综合示例
以下是一个综合示例,展示了字符串、数组、向量、哈希映射和集合的结合使用:
|
|
解释:
- 该示例展示了字符串、数组、向量、哈希映射和集合的基本操作。
7. 总结
Rust 提供了多种集合类型来满足不同的需求。字符串(String
和字符串切片)用于处理文本数据,数组和切片用于固定长度的集合,向量(Vec
)用于动态数组,哈希映射(HashMap
)用于键值对存储,集合(HashSet
)用于不重复的元素集合。掌握这些集合类型的使用是编写高效、安全的 Rust 程序的关键。