[Rust]HashMapのキーと値のペアをランダムに取得するには?

Rust

どうも、ちょげ(@chogetarou)です。

HashMap(ハッシュマップ)のキーと値のペアをランダムに取得する方法を紹介します。

スポンサーリンク

方法

インターフェース, インターネット, プログラム, ブラウザ, Www

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)をランダムに取得します。

スポンサーリンク

使用例

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)

コメント

タイトルとURLをコピーしました