どうも、ちょげ(@chogetarou)です。
HashMap(ハッシュマップ)のキーと値のペアをランダムに取得する方法を紹介します。
方法

HashMap(ハッシュマップ)のキーと値のペアをランダムに取得するには、choose()とthread_rng()を使います。
まず、必要なモジュールをインポートします。
use rand::seq::SliceRandom;
次に、HashMap(ハッシュマップ)をVecに変換します。
変換したVecからchoose()を呼び出し、choose()の引数に「&mut rand::thread_rng()
」を指定します。
最後に、choose()からunwrap()を呼び出します。
//map=対象のハッシュマップ
let items = map.iter().collect::<Vec<_>>(); //ハッシュマップをVecに変換
let result = items.choose(&mut rand::thread_rng()).unwrap(); //ランダムなペア
上記のchoose()は、対象のHashMap(ハッシュマップ)のキー(key)と値(value)をランダムに取得します。
rand::seq::SliceRandom - Rust
API documentation for the Rust `SliceRandom` trait in crate `rand`.
rand::thread_rng - Rust
API documentation for the Rust `thread_rng` fn in crate `rand`.
使用例
use std::collections::HashMap;
use rand::seq::SliceRandom;
fn main(){
let mut nums = HashMap::new();
nums.insert("one", 1);
nums.insert("two", 2);
nums.insert("three", 3);
nums.insert("four", 4);
nums.insert("five", 5);
let items: Vec<_> = nums.iter().collect::<Vec<_>>();
for _ in 0..5 {
println!("{:?}", items.choose(&mut rand::thread_rng()).unwrap());
}
}
出力:
("two", 2)
("two", 2)
("four", 4)
("one", 1)
("one", 1)
コメント