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


Rust HashMap.drain_filter用法及代碼示例


本文簡要介紹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-lang.org大神的英文原創作品 std::collections::hash_map::HashMap.drain_filter。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。