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);
}
先將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);
}
透過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:
張貼留言