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 是否包含指定的键。如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!