隱私權政策

搜尋此網誌

技術提供:Blogger.

關於我自己

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

2024年1月12日 星期五

Rust 迭代all概述 - 是否全部滿足條件


迭代all

all跟any[1]有一點點相似

但all是判斷全部條件是否吻合

any則是只要一個條件吻合就是true


all

文件這樣解釋all[2]

fn all<F>(&mut self, f: F) -> bool
where
    Self: Sized,
    F: FnMut(Self::Item) -> bool,

自身為一個迭代器

輸入一個閉包,閉包內為一個判斷式

最後輸出true or false


例子

假設需要判斷整個數據是否是偶數

可以這樣做

fn main() {
    let data = vec![2, 4, 6, 8, 10, 12, 14, 16, 18, 20];
    let res = data.iter().all(|x| x % 2 == 0);
    println!("is even: {}", res);
}
is even: true

先將data放入迭代器中

並且使用any

閉包內判斷式判斷是否為偶數

最後輸出


如果data中有個奇數

則會出現這樣結果

fn main() {
    let data = vec![2, 4, 6, 8, 10, 12, 13, 16, 18, 20];
    let res = data.iter().all(|x| x % 2 == 0);
    println!("is even: {}", res);
}
is even: false


例子2

現在我們有一堆數據

這些數據表示我接收到的時間

理論上我每秒鐘接收到一筆資料

現在需要判斷是否跟理論上的一樣是每秒收到一筆資料

還是實際上有誤差

fn main() {
    let data = vec![1, 2, 3, 4, 5, 10, 11, 12, 13, 14, 15];
    let res = data.windows(2).all(|x| x[1] - x[0] == 1);
    println!("Time gap = 1: {}", res);
}
Time gap = 1: false

透過windows[3]可以判斷兩筆資料的時間

判斷第二筆時間減第一筆時間的值是否是1

最後輸出


參考資料

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

[2] https://doc.rust-lang.org/std/iter/trait.Iterator.html#method.all

[3] https://lageeblog.blogspot.com/2023/11/rust-windows.html

0 comments:

張貼留言