切片 Slice
&[T] 切片、字符串切片 &str、Range 语法、切片方法
切片 Slice
切片是对集合中连续元素的引用——不拥有数据,只"借用"一部分。
学完本章你将: 掌握 &[T] 数组切片、&str 字符串切片、Range 语法。
数组切片 &[T]
rust
fn main() {
let arr = [1, 2, 3, 4, 5];
let slice: &[i32] = &arr[1..4]; // [2, 3, 4]
println!("{:?}", slice);
// Range 语法
&arr[..] // 全部
&arr[..3] // 前 3 个 [1,2,3]
&arr[2..] // 从索引 2 到最后 [3,4,5]
&arr[1..=3] // [2,3,4](含末尾)
}
字符串切片 &str
rust
let s = String::from("Hello World");
let hello: &str = &s[0..5]; // "Hello"
let world: &str = &s[6..11]; // "World"
let all: &str = &s[..]; // "Hello World"
// 字符串字面量就是 &str
let literal: &str = "Hello"; // &str——存储在二进制文件的只读区
切片作为函数参数
rust
// ✅ 用 &str 代替 &String——更通用
fn first_word(s: &str) -> &str {
let bytes = s.as_bytes();
for (i, &item) in bytes.iter().enumerate() {
if item == b' ' {
return &s[0..i];
}
}
&s[..]
}
let s = String::from("Hello World");
let word = first_word(&s); // 传 &String——自动转 &str(Deref)
println!("{}", word); // "Hello"