Rust入门系列:07、Rust中的数据类型之:复合类型Rust 编程语言提供了多种复合数据类型,用于存储和组织复杂数据
基本定义
Rust 编程语言提供了多种复合数据类型,用于存储和组织复杂数据。
1. 元组 (Tuple)
元组是一种用于存储固定数量值的有序集合。 元组中的元素可以是不同类型的,并且元组的长度是固定的,一旦声明就不能改变。
示例:
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分别访问元组的第一个、第二个和第三个元素。
2. 数组 (Array)
数组是一种用于存储相同类型固定数量值的集合。 数组中的元素必须是相同类型的,并且数组的长度也是固定的,一旦声明就不能改变。
示例:
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()方法返回数组的长度。- 循环迭代数组中的每个元素,并打印其值。
3. 结构体 (Struct)
结构体是一种用于存储一组具有相关关系的数据的复合类型。 结构体由字段(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字段。
4. 枚举 (Enum)
枚举是一种用于定义一组常量的复合类型。 枚举的每个常量称为变体(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的值执行不同的代码块。
5. Vec
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的末尾
6.HashMap
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 的分数为 72
3. 访问 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是否包含指定的键。
转载自:https://juejin.cn/post/7383548892626944015