ys memos

Blog

RustでHashMapを用いて簡単に配列内の値の出現回数をカウントする方法


rust

2022/05/26


プログラミングをしていると,配列内の各値の出現回数をカウントしたいという状況は,よくあると思う.

その際,既出の値と初出の値の条件分岐を書いてしまうと,コードが冗長になってしまい,実装によっては HashMap の探索回数が増えてしまう場合もある.

今回,Rust のstd::collections::HashMapを用い,簡単にカウントする方法を記す.


main.rs
use std::collections::HashMap;

fn main() {
    // 適当に入力した値 (0 <= x <= 9)
    let arr = vec![1,3,2,3,6,5,2,4,7,4,3,6,2,3,4,1,2,3,4,0,3,9,4,5,0,9,2,3,8,4,0,9,1,8,2,0,3,9,4,8,1,9,2,5,6,1,2,8,3,0,4,8];

    // カウンターの準備
    let mut counter = HashMap::new();

    // .iter().for_each()でループ
    // コールバックでカウントアップを行う
    arr.iter().for_each(|x| {
        // .entry()で値を探索し,参照を受け取る
        // .or_insert(0)で,初出の値の場合の値をセットする.(1ではない点に注意!)
        let count = counter.entry(x).or_insert(0);
        // カウントアップ!!
        *count += 1;
    });

    // カウント結果の出力
    println!("{:?}", counter);
}

Rust の標準ライブラリ,便利ですね!


関連タグを探す