隱私權政策

搜尋此網誌

技術提供:Blogger.

關於我自己

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

2024年1月12日 星期五

Rust 迭代any概述 - 是否滿足條件


迭代any

any[1]可以判斷迭代器中是否滿足條件

文件這樣解釋

fn any<F>(&mut self, f: F) -> bool

自身為迭代器

使用一個閉包

當符合閉包條件時

輸出為true

若不符合則為false


例子

假設我想知道整個數組內有沒有奇數

可以這樣

fn main() {
    let data = vec![2,4,5,6,8,10,12,14,16,18];
    let all_even = data.iter().any(|x| x % 2 == 1);
    println!("is_even: {}", !all_even);
}
is_even: false

先把數組放入迭代器

透過any判斷迭代器中有沒有奇數

並且輸出


例子2

舉一個實際應用的例子

假設我蒐集多筆資料的時間

理論上這些資料應該都要每秒中傳一個

但我想知道是否有資料超過一秒


fn main() {
    let data = vec![1, 2, 3, 4, 5, 10, 11, 12, 13, 14, 15];
    let is_wrong = data.windows(2).any(|x| x[1] - x[0] != 1);
    println!("wrong: {}", is_wrong);
}
wrong: true

數組可以看到前面後面都是每秒傳一筆數據

但中間突然有個五秒後才傳

因此可以使用windows[2]兩個兩個比較時間

如果windows兩個相差超過一秒

則判定錯誤


參考文獻

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

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


0 comments:

張貼留言