隱私權政策

搜尋此網誌

技術提供:Blogger.

關於我自己

我的相片
目前從事軟體相關行業,喜歡閱讀、健身、喝調酒。習慣把遇到的問題記下來,每天做一些整理方便自己以後查。 Python、Rust、Kotlin等程式語言皆為自學,目前比較著重在Rust語言,歡迎一起討論。

2024年1月14日 星期日

Rust - 迭代all, any, filter, find差別


迭代all, any, filter, find

我覺得迭代裡面有四個很像

all[1], any[2], filter[3], find[4]

差別的地方有幾個

all和any輸出是bool,為true或false

filter會輸出一個迭代器

find輸出一個元素


例子

假設我有一組數組

閉包條件都是判斷是否為偶數

結果會長這樣

fn main() {
    let data = vec![2, 4, 6, 8, 10, 11, 12, 14, 16, 18, 20];
    let all_res = data.iter().all(|x| x % 2 == 0);
    let any_res = data.iter().any(|x| x % 2 == 0);
    let filter_res = data.iter().filter(|x| *x % 2 == 0).collect::<Vec<_>>();
    let find_res = data.iter().find(|x| *x % 2 == 0).unwrap();
    println!("all: {}", all_res);
    println!("any: {}", any_res);
    println!("filter: {:?}", filter_res);
    println!("find: {}", find_res);
}
all: false any: true filter: [2, 4, 6, 8, 10, 12, 14, 16, 18, 20] find: 2

all會判斷是否數組內所有元素都滿足條件,因為數組有奇數所以不符合

any會判斷是否數組內至少一個元素滿足條件,只要一個就會true

filter會將所有數組內滿足條件的輸出,因此除了奇數以外都會輸出

find則是會輸出第一個滿足條件的元素,也就是2


參考資料

[1] https://lageeblog.blogspot.com/2024/01/rust-all.html

[2] https://lageeblog.blogspot.com/2024/01/rust-any.html

[3] https://lageeblog.blogspot.com/2023/10/rust-filter.html

[4] https://lageeblog.blogspot.com/2023/10/rust-find.html









0 comments:

張貼留言