本文簡要介紹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 BTreeMap.last_key_value用法及代碼示例
- Rust BTreeMap.get用法及代碼示例
- Rust BTreeMap.try_insert用法及代碼示例
- Rust BTreeMap.values_mut用法及代碼示例
- Rust BTreeMap.first_key_value用法及代碼示例
- Rust BTreeMap.values用法及代碼示例
- Rust BTreeMap.get_key_value用法及代碼示例
- Rust BTreeMap.into_values用法及代碼示例
- Rust BTreeMap.remove_entry用法及代碼示例
- Rust BTreeMap.is_empty用法及代碼示例
- Rust BTreeMap.last_entry用法及代碼示例
- Rust BTreeMap.iter用法及代碼示例
- Rust BTreeMap.pop_last用法及代碼示例
- Rust BTreeMap.range_mut用法及代碼示例
- Rust BTreeMap.len用法及代碼示例
- Rust BTreeMap.split_off用法及代碼示例
- Rust BTreeMap.clear用法及代碼示例
- Rust BTreeMap.into_keys用法及代碼示例
- Rust BTreeMap.range用法及代碼示例
- Rust BTreeMap.append用法及代碼示例
- Rust BTreeMap.contains_key用法及代碼示例
- Rust BTreeMap.retain用法及代碼示例
- Rust BTreeMap.first_entry用法及代碼示例
- Rust BTreeMap.entry用法及代碼示例
- Rust BTreeMap.remove用法及代碼示例
注:本文由純淨天空篩選整理自rust-lang.org大神的英文原創作品 alloc::collections::btree_map::BTreeMap.drain_filter。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。