切片 Slice
slice 是对一段连续数据的引用。它不拥有数据,只是借用其中一段。
字符串切片
src/main.rs
fn main() {
let text = String::from("hello world");
let hello = &text[0..5];
println!("{hello}");
}
&text[0..5] 是字符串切片,类型是 &str。
范围写法
&text[..5] // 从开头到 5,不包含 5
&text[6..] // 从 6 到末尾
&text[..] // 整个字符串
字符串切片索引是字节位置,不是字符位置。处理中文时要特别小心。
数组切片
src/main.rs
fn main() {
let values = [10, 20, 30, 40];
let part = &values[1..3];
println!("{part:?}");
}
输出:
[20, 30]
函数参数优先使用切片
如果函数只需要读取字符串,优先写 &str:
fn print_name(name: &str) {
println!("{name}");
}
这样既可以传 String 的引用,也可以传字符串字面量:
let name = String::from("Rust");
print_name(&name);
print_name("GetIoT");
小结
你需要掌握:
- slice 是借用数据的一部分。
- 字符串切片类型是
&str。 - 数组切片类型类似
&[T]。 - 字符串切片索引按字节计算。
- 函数参数常优先使用
&str和&[T]。