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 の標準ライブラリ,便利ですね!