RustのBTreeMapで特定のキー以上(未満)の要素を全て取り除くにはsplit_offメソッドを使う
やりたいこと
BTreeMapの特定のキー以上の要素を消去したい.
望むこと
BTreeMapはその名の通りツリーなのだからツリーを切り離すことですっきり効率もよく削除したい. そりゃ全てイテレーションすれば削除は出来るでしょうがスマートじゃあない.
解決方法
split_offメソッドを使います.
サンプルコード
use std::collections::*;
fn main() {
let mut a = BTreeMap::new();
a.insert(0, "a");
a.insert(1, "b");
a.insert(2, "c");
a.insert(3, "d");
let b = a.split_off(&2);
a.insert(2, "e");
dbg!(a);
dbg!(b);
}
実行結果
[qr_8fMsOG.rs:11] a = {
0: "a",
1: "b",
2: "e",
}
[qr_8fMsOG.rs:12] b = {
2: "c",
3: "d",
}
要らない方は捨ててしまえば削除が実現します.