quinnwencn / program-record

This is a repository documenting my journey of learning to program.
Apache License 2.0
0 stars 0 forks source link

[RustLearning] Slice的使用 #99

Closed quinnwencn closed 5 months ago

quinnwencn commented 5 months ago

Slice是如何定義的,又該如何使用?Slice有哪些常用的方法?

quinnwencn commented 5 months ago

定義

Cpp中沒有切片的概念,在python等語言中則較為常見。我們假設s是一個數組(字符串數組也可以),以s為例子說明在Rust中切片的定義方式:

常用方法

Rust中,切片有很多方法支持,但是我這裡只列舉常用的幾個,後續用到的再補充:

pub fn sublist(_first_list: &[T], _second_list: &[T]) -> Comparison { let first_len = _first_list.len(); let second_len = _second_list.len(); match first_len.cmp(&second_len) { std::cmp::Ordering::Less => { if _first_list.len() == 0 || _second_list.windows(_first_list.len()).any(|window| window == _first_list) { Comparison::Sublist } else { Comparison::Unequal } }, std::cmp::Ordering::Equal => { if _first_list == _second_list { Comparison::Equal } else { Comparison::Unequal } }, std::cmp::Ordering::Greater => { if _second_list.len() == 0 || _first_list.windows(_second_list.len()).any(|window| window == _second_list) { Comparison::Superlist } else { Comparison::Unequal } }, } }


題解中,通過長度較長的切片使用windows方法,以短的切片長度為輸入,生成多個windows切片,然後通過any裡匹配,是否有其中一個切片window和短的切片匹配。
quinnwencn commented 5 months ago

移動到blog倉庫