[Rust指南] 8.2. 向量和枚举的应用

发布: (2026年4月12日 GMT+8 06:06)
4 分钟阅读
原文: Dev.to

Source: Dev.to

Cover image for [Rust Guide] 8.2. Vector and Enum Applications

8.2.0. 章节概览

第 8 章主要讲述 Rust 中常见的集合。Rust 提供了许多类似集合的数据结构,这些集合可以容纳多个值。然而,第 8 章涉及的集合不同于数组和元组。

第 8 章的集合存储在堆上,而不是栈上。这也意味着它们的大小不需要在编译时确定;在运行时,它们可以动态增长或收缩。

本章重点介绍三种集合:VectorStringHashMap

8.2.1. Vector 与 Enum 如何相互补充

虽然 Vector 可以动态增长或收缩,但它的所有元素仍必须是同一种数据类型。当我们需要在堆上存放不同类型的数据时,可以使用枚举(enum)。

枚举变体可以携带 附加数据,而这些附加数据可以是不同的类型。最重要的是,所有变体都属于同一个枚举类型。换句话说,所有变体的类型相同,因此它们可以存放在 Vector 中。

这使得我们可以利用枚举,使得在 Vector 中存放不同数据类型成为可能。

8.2.2. Vector + enum

下面是一个将 Vector 与枚举一起使用的实用示例:

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

fn main() {
    let row = vec![
        SpreadSheetCell::Int(5567),
        SpreadSheetCell::Text("up up".to_string()),
        SpreadSheetCell::Float(114.514),
    ];
}

该示例模拟了 Excel 单元格的行为。一个单元格只能存放以下三种之一:整数、浮点数或字符串。因此我们定义了 SpreadSheetCell 枚举,包含 IntFloatText 三个变体。

main 中,变量 row 保存了一行单元格。由于一行中的单元格数量并不固定,我们使用 Vector 来存储它们。向量初始化时包含了三个单元格:一个整数 (5567)、一个字符串 ("up up") 和一个浮点数 (114.514)。

通过使用可以携带数据的枚举,我们间接地在 Vector 中存放了不同的数据类型。

Rust 必须在编译时知道 Vector 的元素类型,以便确定需要分配多少堆内存,并确保对所有元素的批量操作都是合法的。枚举配合 match 表达式可以让 Rust 在编译时了解所有可能的情况,从而在运行时进行正确的处理。

如果可能的数据类型集合是穷尽的,枚举即可胜任。对于无限多的可能性或非穷尽集合,则需要使用 trait——这是后续章节的内容。

0 浏览
Back to Blog

相关文章

阅读更多 »

[Rust 指南] 6.2. Option 枚举

Option 枚举是什么?Option 在标准库中定义,并且已包含在 prelude(预导入模块)中。它用于表示可能的值……

理解 Java 中的方法

当你编写 Java 程序时,你会很快遇到一个问题——你会一次又一次地编写相同的代码行。方法可以解决这个问题。把方法想象成……

理解 Java 方法及简单示例

什么是 Java 中的方法? Java 中的方法是一段执行特定任务的代码块。 基本语法 java returnType methodNameparameters { // method body... }