• 作成:

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",
}

要らない方は捨ててしまえば削除が実現します.