Day 5:切片(Slices)
學習目標
- 理解切片是一段連續資料的「借用視圖」
- 熟悉字串切片與陣列切片
- 學會
&str 與 &String 的關係
今日重點
字串切片
let s = String::from("hello world");
let hello = &s[0..5]; // "hello"
let world = &s[6..11]; // "world"
println!("{} {}", hello, world);
簡寫形式
let slice = &s[..5]; // 從頭:"hello"
let slice = &s[6..]; // 到結尾:"world"
let slice = &s[..]; // 全部:"hello world"
陣列切片
let numbers = vec![1, 2, 3, 4, 5];
let slice = &numbers[1..3]; // [2, 3]
println!("Slice: {:?}", slice);
用切片當參數(&str)
fn first_word(s: &str) -> &str {
let bytes = s.as_bytes();
for (i, &byte) in bytes.iter().enumerate() {
if byte == b' ' {
return &s[0..i];
}
}
&s[..]
}
練習
- 對
String::from("apple,pineapple") 切片出 "apple" 和 "pineapple"。
- 寫一個
last_word(s: &str) -> &str 回傳最後一個字。
- 用
&str 當參數,讓它同時接受 &String 和 &str 兩者(提示:傳 &s 即可自動轉)。
自我檢查
深入連結
- The Book 第 4 章「The Slice Type」