删除元素
本课属于 Coddy Rust 学习旅程的“逻辑与流程”单元。第 13 课,共 66 课。
有时,你需要从向量中删除元素,而不只是添加元素。Rust 提供了两种主要的元素删除方法,分别适用于不同的情况。
.pop() 方法会移除并返回向量中的最后一个元素:
let mut numbers = vec![10, 20, 30, 40];
let last = numbers.pop(); // 移除 40,返回 Some(40)
// numbers 现在是 [10, 20, 30]注意,.pop() 会返回一个 Option,如果有元素可以移除,它会返回 Some(value);如果向量已经为空,则会返回 None。因此,即使向量为空,也可以安全地使用它。
.remove() 方法会删除指定索引处的元素,并返回该元素:
let mut fruits = vec!["apple", "banana", "cherry"];
let removed = fruits.remove(1); // 移除 "banana"
// fruits 现在是 ["apple", "cherry"]使用 .remove() 时,被删除索引之后的所有元素都会向左移动以填补空缺。对于较大的向量,从开头或中间删除元素时,这个操作可能会比较慢,因为需要移动很多元素。
这两种方法都要求向量可变,因为它们会修改向量的内容。要从末尾删除元素时,选择 .pop();要从特定位置删除元素时,选择 .remove()。
挑战
简单你会收到两个输入:第一个是由逗号分隔的数字列表,第二个是要删除的索引。读取这两个输入,根据这些数字创建一个向量,删除指定索引处的元素,然后将剩余元素逐行打印出来。
要求:
- 读取第一行输入,其中包含由逗号分隔的数字(例如,
10,20,30,40,50) - 按逗号拆分字符串,并将每个数字转换为整数
- 根据这些数字创建一个可变向量
- 读取第二行输入,并将其转换为表示索引的整数
- 使用
.remove()删除该索引处的元素 - 将每个剩余元素单独打印在一行上
输入:
- 第一行:由逗号分隔的整数(例如,
10,20,30,40,50) - 第二行:表示要删除的索引的整数
输出:将向量中的每个剩余元素单独打印在一行上
亲手试试
use std::io;
fn main() {
// 读取以逗号分隔的数字
let mut numbers_input = String::new();
io::stdin().read_line(&mut numbers_input).expect("Failed to read line");
// 读取要删除的元素的索引
let mut index_input = String::new();
io::stdin().read_line(&mut index_input).expect("Failed to read line");
// TODO: 在下方编写你的代码
// 1. 按逗号拆分 numbers_input,并将各部分转换为整数
// 2. 用这些数字创建一个可变向量
// 3. 将 index_input 转换为整数
// 4. 删除指定索引处的元素
// 5. 将剩余的每个元素分别打印在单独一行
}这节课包含一个小测验。开始学习即可作答,并记录你的进度。
逻辑与流程中的所有课
自己练习: Rust 在线编译器