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);
}
數組可以看到前面後面都是每秒傳一筆數據
但中間突然有個五秒後才傳
因此可以使用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:
張貼留言