本文简要介绍rust语言中 std::collections::hash_map::HashMap.drain_filter
的用法。
用法
pub fn drain_filter<F>(&mut self, pred: F) -> DrainFilter<'_, K, V, F> where F: FnMut(&K, &mut V) -> bool,
创建一个迭代器,它使用闭包来确定是否应删除元素。
如果闭包返回 true,则从映射中删除元素并生成。如果闭包返回 false 或Panics,则元素保留在Map中并且不会被生成。
请注意,drain_filter
允许您改变过滤器闭包中的每个值,无论您选择保留还是删除它。
如果迭代器仅被部分消耗或根本不消耗,则剩余的每个元素仍将受到闭包的影响,如果它返回 true,则将其移除并丢弃。
如果在闭包中发生Panics,或者在删除元素时发生Panics,或者如果 DrainFilter
值泄露,则未指定还有多少元素将受到闭包。
例子
将映射拆分为偶数和奇数键,重用原始映射:
#![feature(hash_drain_filter)]
use std::collections::HashMap;
let mut map: HashMap<i32, i32> = (0..8).map(|x| (x, x)).collect();
let drained: HashMap<i32, i32> = map.drain_filter(|k, _v| k % 2 == 0).collect();
let mut evens = drained.keys().copied().collect::<Vec<_>>();
let mut odds = map.keys().copied().collect::<Vec<_>>();
evens.sort();
odds.sort();
assert_eq!(evens, vec![0, 2, 4, 6]);
assert_eq!(odds, vec![1, 3, 5, 7]);
相关用法
- Rust HashMap.drain用法及代码示例
- Rust HashMap.get用法及代码示例
- Rust HashMap.try_insert用法及代码示例
- Rust HashMap.keys用法及代码示例
- Rust HashMap.iter用法及代码示例
- Rust HashMap.iter_mut用法及代码示例
- Rust HashMap.retain用法及代码示例
- Rust HashMap.with_capacity_and_hasher用法及代码示例
- Rust HashMap.clear用法及代码示例
- Rust HashMap.reserve用法及代码示例
- Rust HashMap.with_hasher用法及代码示例
- Rust HashMap.into_keys用法及代码示例
- Rust HashMap.into_values用法及代码示例
- Rust HashMap.get_mut用法及代码示例
- Rust HashMap.is_empty用法及代码示例
- Rust HashMap.len用法及代码示例
- Rust HashMap.remove用法及代码示例
- Rust HashMap.insert用法及代码示例
- Rust HashMap.entry用法及代码示例
- Rust HashMap.capacity用法及代码示例
- Rust HashMap.contains_key用法及代码示例
- Rust HashMap.values用法及代码示例
- Rust HashMap.values_mut用法及代码示例
- Rust HashMap.new用法及代码示例
- Rust HashMap.shrink_to_fit用法及代码示例
注:本文由纯净天空筛选整理自rust-lang.org大神的英文原创作品 std::collections::hash_map::HashMap.drain_filter。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。