本文簡要介紹rust語言中 std::iter::Iterator.filter
的用法。
用法
fn filter<P>(self, predicate: P) -> Filter<Self, P> where P: FnMut(&Self::Item) -> bool,
創建一個迭代器,它使用閉包來確定是否應該產生一個元素。
給定一個元素,閉包必須返回 true
或 false
。返回的迭代器將隻產生閉包返回 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 Iterator.filter_map用法及代碼示例
- Rust Iterator.find_map用法及代碼示例
- Rust Iterator.find用法及代碼示例
- Rust Iterator.flat_map用法及代碼示例
- Rust Iterator.for_each用法及代碼示例
- Rust Iterator.fuse用法及代碼示例
- Rust Iterator.flatten用法及代碼示例
- Rust Iterator.fold用法及代碼示例
- Rust Iterator.skip_while用法及代碼示例
- Rust Iterator.max_by_key用法及代碼示例
- Rust Iterator.is_sorted用法及代碼示例
- Rust Iterator.cmp用法及代碼示例
- Rust Iterator.is_partitioned用法及代碼示例
- Rust Iterator.intersperse用法及代碼示例
- Rust Iterator.scan用法及代碼示例
- Rust Iterator.min用法及代碼示例
- Rust Iterator.peekable用法及代碼示例
- Rust Iterator.rev用法及代碼示例
- Rust Iterator.product用法及代碼示例
- Rust Iterator.any用法及代碼示例
- Rust Iterator.max用法及代碼示例
- Rust Iterator.by_ref用法及代碼示例
- Rust Iterator.min_by用法及代碼示例
- Rust Iterator.copied用法及代碼示例
- Rust Iterator.inspect用法及代碼示例
注:本文由純淨天空篩選整理自rust-lang.org大神的英文原創作品 std::iter::Iterator.filter。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。