Rust编程语言提供了多种复合数据类型,用于存储和组织复杂数据。
Rust 编程语言提供了多种复合数据类型,用于存储和组织复杂数据。
元组是一种用于存储固定数量值的有序集合。 元组中的元素可以是不同类型的,并且元组的长度是固定的,一旦声明就不能改变。
let tup = (1, 2.3, "hello");
println!("The first element of the tuple is: {}", tup.0);
println!("The second element of the tuple is: {}", tup.1);
println!("The third element of the tuple is: {}", tup.2);
tup
变量声明了一个元组,包含三个元素:一个整数 1
、一个浮点数 2.3
和一个字符串 "hello"
。tup.0
、tup.1
和 tup.2
分别访问元组的第一个、第二个和第三个元素。数组是一种用于存储相同类型固定数量值的集合。 数组中的元素必须是相同类型的,并且数组的长度也是固定的,一旦声明就不能改变。
let arr = [1, 2, 3, 4, 5];
for i in 0..arr.len() {
println!("The {}th element of the array is: {}", i + 1, arr[i]);
}
arr
变量声明了一个数组,包含五个元素:整数 1
、2
、3
、4
和 5
。arr.len()
方法返回数组的长度。结构体是一种用于存储一组具有相关关系的数据的复合类型。 结构体由字段(field)组成,每个字段都有自己的名称和类型。 结构体可以用 struct
关键字来声明。
struct Person {
name: String,
age: u32,
height: f64,
}
let person = Person {
name: "John Doe".to_string(),
age: 30,
height: 1.75,
};
println!("The person's name is: {}", person.name);
println!("The person's age is: {}", person.age);
println!("The person's height is: {}", person.height);
Person
结构体定义了三个字段:name
(字符串类型)、age
(无符号 32 位整数类型)和 height
(浮点数类型)。person
变量创建了一个 Person
结构体的实例。person.name
、person.age
和 person.height
分别访问结构体的 name
、age
和 height
字段。枚举是一种用于定义一组常量的复合类型。 枚举的每个常量称为变体(variant)。 枚举可以用 enum
关键字来声明。
enum Color {
Red,
Green,
Blue,
}
let color = Color::Red;
match color {
Color::Red => println!("The color is red"),
Color::Green => println!("The color is green"),
Color::Blue => println!("The color is blue"),
}
Color
枚举定义了三个变体:Red
、Green
和 Blue
。color
变量声明了一个 Color
枚举的实例,并将其值设置为 Red
。match
表达式用于根据 color
的值执行不同的代码块。Vec 是一种动态数组类型,用于存储相同类型的值。 Vec 的元素数量可以在运行时动态增长或缩减,因此它是一种动态数据结构。
let mut vec = Vec<i32>::new();
vec.push(1);
vec.push(2);
vec.push(3);
for element in &vec {
println!("The element is: {}", element);
}
vec
变量声明了一个新的 Vec
实例。vec.push()
方法将元素添加到 Vec
的末尾HashMap 是一种用于存储键值对的哈希表数据结构。它由键的集合和值的集合组成,每个键都与一个值相关联。HashMap 的键可以是任何哈希可用的类型,而值可以是任何类型。
HashMap 与其他复合类型(如元组、数组、结构体和枚举)的区别在于,HashMap 的键值对是无序的,并且键是唯一的。此外,HashMap 的键可以是哈希可用的任何类型。
1. 创建一个 HashMap
use std::collections::HashMap;
let mut scores: HashMap<String, u32> = HashMap::new();
解释:
use std::collections::HashMap;
语句将 HashMap
模块引入作用域。let mut scores: HashMap<String, u32> = HashMap::new();
语句创建一个名为 scores
的 HashMap
实例,其中键类型为 String
,值类型为 u32
。 mut
关键字表示该变量是可变的,可以对其内容进行修改。2. 向 HashMap 中插入键值对
scores.insert("Alice".to_string(), 95);
scores.insert("Bob".to_string(), 80);
scores.insert("Charlie".to_string(), 72);
解释:
scores.insert()
方法将键值对插入到 HashMap
中。 第一个参数是键,第二个参数是值。 在此示例中,我们插入了三个键值对:
"Alice": 95
表示 Alice 的分数为 95"Bob": 80
表示 Bob 的分数为 80"Charlie": 72
表示 Charlie 的分数为 723. 访问 HashMap 中的值
let alice_score = scores.get("Alice").unwrap();
println!("Alice's score is: {}", alice_score);
let bob_score = scores.get("Bob").unwrap();
println!("Bob's score is: {}", bob_score);
解释:
scores.get()
方法用于获取指定键的值。 如果键不存在,则返回 None
。 在此示例中,我们获取了 Alice 和 Bob 的分数。unwrap()
方法用于从 Option
类型中提取值。 如果值存在,则返回该值;否则,引发错误。4. 遍历 HashMap
for (key, value) in &scores {
println!("Key: {}, Value: {}", key, value);
}
解释:
for
循环用于遍历 HashMap
中的每个键值对。 &scores
将 HashMap
转换为引用,以便在循环中使用。key
和 value
变量分别表示当前键和值。5. 从 HashMap 中删除键值对
scores.remove("Charlie");
if scores.contains_key("Charlie") {
println!("Charlie is still in the scores HashMap");
} else {
println!("Charlie has been removed from the scores HashMap");
}
解释:
scores.remove()
方法用于从 HashMap
中删除指定键的键值对。 如果键不存在,则返回 None
。scores.contains_key()
方法用于检查 HashMap
是否包含指定的键。如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!