Menu
CoddyTech

其他切片

本课属于 Coddy Rust 学习旅程的“逻辑与流程”单元。第 57 课,共 66 课。

虽然字符串切片非常有用,但切片并不局限于字符串。Rust 的切片概念适用于任何元素序列,因此你可以用它处理集合,而无需获取所有权。

你可以使用学习字符串时学过的相同语法,从数组和向量创建切片。例如,如果你有一个数字数组,就可以创建一个引用其中部分或全部内容的切片:

let numbers = [1, 2, 3, 4, 5];
let slice: &[i32] = &numbers[1..4]; // 这样就得到了 [2, 3, 4]
let full_slice: &[i32] = &numbers;  // 这引用了整个数组

同样的原理也适用于向量。你可以从向量中创建切片,以便处理部分数据,而无需移动或复制数据:

let mut vec = vec![10, 20, 30, 40];
let vec_slice: &[i32] = &vec[0..2]; // 这样就得到了 [10, 20]
challenge icon

挑战

简单

你会收到 3 个输入。第一个输入是由逗号分隔的数字列表。第二个输入是两个由空格分隔的数字,分别表示创建切片的起始索引和结束索引。第三个输入是一个数字,表示要访问的切片索引。

根据逗号分隔的数字创建一个向量,然后使用指定范围创建切片。访问切片中给定索引处的元素并打印出来。

要求:

  • 读取第一个输入(由逗号分隔的数字)并去除空白
  • 按逗号拆分输入,并将每个数字解析为 i32
  • 根据这些数字创建一个向量
  • 读取第二个输入(两个由空格分隔的数字)并去除空白
  • 按空格拆分第二个输入,获取起始索引和结束索引
  • 将两个索引都解析为 usize
  • 使用范围语法 &vec[start..end] 根据向量创建一个切片
  • 读取第三个输入(要访问的索引)并去除空白
  • 将索引解析为 usize
  • 访问切片中指定索引处的元素
  • 打印访问到的元素

输入:

  • 第一行:由逗号分隔的数字(例如,10,20,30,40,50)
  • 第二行:两个由空格分隔的数字(例如,1 4)
  • 第三行:一个索引数字(例如,2)

输出:

  • 切片中指定索引处的元素

亲手试试

use std::io::{self, BufRead};

fn main() {
    let stdin = io::stdin();
    let mut lines = stdin.lock().lines();
    
    // 读取第一个输入(用逗号分隔的数字)
    let first_input = lines.next().unwrap().unwrap();
    
    // 读取第二个输入(起始索引和结束索引)
    let second_input = lines.next().unwrap().unwrap();
    
    // 读取第三个输入(要访问的索引)
    let third_input = lines.next().unwrap().unwrap();
    
    // TODO: 在下方编写你的代码
    // 解析用逗号分隔的数字,并创建一个向量
    // 解析起始索引和结束索引
    // 从向量创建一个切片
    // 从切片中访问指定索引处的元素
    
    // 输出结果
    // println!("{}", result);
}
quiz icon自我测试

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

逻辑与流程中的所有课

自己练习: Rust 在线编译器