Rust 中 peekable 的使用
在 Rust 中,從迭代器中獲取(也就是 “消費”)一個元素時,每次調用 next
方法都會 “消費” 迭代器的一個元素,這意味着此元素被從迭代器中移除並返回給調用者, 一旦一個元素被消費,它就不能再次從同一個迭代器中獲取。如下:
fn main() {
let numbers = vec![1, 3, 5, 4, 9, 6, 7];
let mut iter = numbers.iter(); // 創建一個迭代器
// 消費第一個元素
if let Some(first) = iter.next() {
println!("The first number is {}", first);
}
// 繼續消費剩餘的元素
for number in iter {
println!("Next number: {}", number);
}
}
輸出:
The first number is 1
Next number: 3
Next number: 5
Next number: 4
Next number: 9
Next number: 6
Next number: 7
iter.next()
首先被調用來消費第一個元素。一旦這個元素被消費,它就不再是迭代器的一部分了。隨後的 for
循環繼續迭代剩餘的元素,每次迭代循環都會消費一個元素,直到所有元素被消費完畢。
假如有這樣一個 Vec,有這樣一個需求:如果下一個元素是偶數,則打印出當前元素。
這時就要用到迭代器的 peekable
方法, 其允許查看迭代器中的下一個元素,而不會消費它。
這樣,就可以根據下一個元素的值來決定是否打印當前元素。
peek 本身是_偷看,窺視_的意思
fn main() {
let numbers = vec![1, 3, 5, 4, 9, 6, 7];
let mut iter = numbers.iter().peekable();
while let Some(¤t) = iter.next() {
if let Some(&&next) = iter.peek() {
if next % 2 == 0 {
println!("{}", current);
}
}
}
}
輸出爲:
5
9
如上 創建了一個 Vec<i32>
的迭代器,並使用 peekable
方法使其成爲 Peekable
迭代器。
使用 while let
循環遍歷迭代器。在每次循環中,使用 iter.next()
獲取當前元素。
使用 iter.peek()
查看下一個元素,但不從迭代器中移除它。
如果下一個元素是偶數(next % 2 == 0
),打印出當前元素。
如此,這段代碼遍歷了整個 Vec<i32>
,只有在下一個元素是偶數時,纔會打印當前元素。
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/FCK0wFAfL1BWym4XDeLGQg