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


Rust BTreeMap.drain_filter用法及代码示例


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

用法

pub fn drain_filter<F>(&mut self, pred: F) -> DrainFilter<'_, K, V, F> where    K: Ord,    F: FnMut(&K, &mut V) -> bool,

创建一个迭代器,它以键升序访问所有元素(键值对),并使用闭包来确定是否应该删除元素。如果闭包返回 true ,则该元素将从映射中删除并生成。如果闭包返回 false 或Panics,则该元素将保留在Map中并且不会被生成。

迭代器还允许您改变闭包中每个元素的值,无论您选择保留还是删除它。

如果迭代器仅被部分消耗或根本不消耗,则剩余的每个元素仍会受到闭包的影响,这可能会更改其值,并通过返回 true 将元素移除并丢弃。

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

例子

将映射拆分为偶数和奇数键,重用原始映射:

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

let mut map: BTreeMap<i32, i32> = (0..8).map(|x| (x, x)).collect();
let evens: BTreeMap<_, _> = map.drain_filter(|k, _v| k % 2 == 0).collect();
let odds = map;
assert_eq!(evens.keys().copied().collect::<Vec<_>>(), vec![0, 2, 4, 6]);
assert_eq!(odds.keys().copied().collect::<Vec<_>>(), vec![1, 3, 5, 7]);

相关用法


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