其他切片
本课属于 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]挑战
简单你会收到 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);
}这节课包含一个小测验。开始学习即可作答,并记录你的进度。
逻辑与流程中的所有课
自己练习: Rust 在线编译器