当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Rust BTreeSet.drain_filter用法及代码示例


本文简要介绍rust语言中alloc::collections::btree_set::BTreeSet.drain_filter的用法。

用法

pub fn drain_filter<'a, F>(&'a mut self, pred: F) -> DrainFilter<'a, T, F> where    T: Ord,    F: 'a + FnMut(&T) -> bool,

创建一个迭代器,它按升序访问所有值,并使用闭包来确定是否应该删除一个值。

如果闭包返回 true ,则从集合中删除该值并生成。如果闭包返回 false 或Panics,则该值保留在集合中并且不会被产生。

如果迭代器仅被部分消耗或根本不消耗,则剩余的每个值仍会受到闭包并在返回 true 时被删除和丢弃。

如果在闭包中发生Panics,或者在删除值时发生Panics,或者如果DrainFilter 本身泄露,则未指定还有多少值将受到闭包。

例子

将集合拆分为偶数和奇数,重用原始集合:

#![feature(btree_drain_filter)]
use std::collections::BTreeSet;

let mut set: BTreeSet<i32> = (0..8).collect();
let evens: BTreeSet<_> = set.drain_filter(|v| v % 2 == 0).collect();
let odds = set;
assert_eq!(evens.into_iter().collect::<Vec<_>>(), vec![0, 2, 4, 6]);
assert_eq!(odds.into_iter().collect::<Vec<_>>(), vec![1, 3, 5, 7]);

相关用法


注:本文由纯净天空筛选整理自rust-lang.org大神的英文原创作品 alloc::collections::btree_set::BTreeSet.drain_filter。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。