Closed quinnwencn closed 5 months ago
Cpp中沒有切片的概念,在python等語言中則較為常見。我們假設s是一個數組(字符串數組也可以),以s為例子說明在Rust中切片的定義方式:
s[..]: 獲取s到所有元素 對於需要包含右邊的元素,可以採用=號,如s[n1..=n2], 此時切片的元素區間為:[n1..n2]; 需要注意的一點是,Rust中的切片為str,String無法通過下標索引,因此無法像數組一樣,採用下標定義。 在Rust中,切片是原始數據類型的引用,因此無法通過以下方式定義切片:
fn main() {
let arr = [1, 2, 3, 4, 5];
let n: usize = 3;
let slice = arr[0..n];
}
正確的用法為:
fn main() {
let mut arr = [1, 2, 3, 4, 5];
let slice1 = &arr[0..3];
println!("{:?}", slice1);
let slice2 = &mut arr[0..3];
slice2[0] = 6;
println!("{:?}", slice2);
}
這裏說明下切片和數組的區別:
Rust中,切片有很多方法支持,但是我這裡只列舉常用的幾個,後續用到的再補充:
#[derive(Debug, PartialEq, Eq)]
pub enum Comparison {
Equal,
Sublist,
Superlist,
Unequal,
}
pub fn sublist
題解中,通過長度較長的切片使用windows方法,以短的切片長度為輸入,生成多個windows切片,然後通過any裡匹配,是否有其中一個切片window和短的切片匹配。
移動到blog倉庫
Slice是如何定義的,又該如何使用?Slice有哪些常用的方法?