當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Rust Iterator.filter用法及代碼示例


本文簡要介紹rust語言中 std::iter::Iterator.filter 的用法。

用法

fn filter<P>(self, predicate: P) -> Filter<Self, P> where    P: FnMut(&Self::Item) -> bool,

創建一個迭代器,它使用閉包來確定是否應該產生一個元素。

給定一個元素,閉包必須返回 truefalse 。返回的迭代器將隻產生閉包返回 true 的元素。

例子

基本用法:

let a = [0i32, 1, 2];

let mut iter = a.iter().filter(|x| x.is_positive());

assert_eq!(iter.next(), Some(&1));
assert_eq!(iter.next(), Some(&2));
assert_eq!(iter.next(), None);

因為傳遞給 filter() 的閉包需要一個引用,並且許多迭代器會迭代引用,這可能會導致一種可能令人困惑的情況,其中閉包的類型是雙重引用:

let a = [0, 1, 2];

let mut iter = a.iter().filter(|x| **x > 1); // need two *s!

assert_eq!(iter.next(), Some(&2));
assert_eq!(iter.next(), None);

通常在參數上使用解構來剝離一個:

let a = [0, 1, 2];

let mut iter = a.iter().filter(|&x| *x > 1); // both & and *

assert_eq!(iter.next(), Some(&2));
assert_eq!(iter.next(), None);

或兩者:

let a = [0, 1, 2];

let mut iter = a.iter().filter(|&&x| x > 1); // two &s

assert_eq!(iter.next(), Some(&2));
assert_eq!(iter.next(), None);

這些層。

請注意 iter.filter(f).next() 等同於 iter.find(f)

相關用法


注:本文由純淨天空篩選整理自rust-lang.org大神的英文原創作品 std::iter::Iterator.filter。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。