Menu
CoddyTech

删除元素

本课属于 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()。

challenge icon

挑战

简单

你会收到两个输入:第一个是由逗号分隔的数字列表,第二个是要删除的索引。读取这两个输入,根据这些数字创建一个向量,删除指定索引处的元素,然后将剩余元素逐行打印出来。

要求:

  • 读取第一行输入,其中包含由逗号分隔的数字(例如,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. 将剩余的每个元素分别打印在单独一行
    
}
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

逻辑与流程中的所有课

自己练习: Rust 在线编译器