【Rust】HashMapの値にVectorを設定

【Rust】HashMapの値にVectorを設定

HashMap(連想配列)の値にvectorを設定した際の操作で戸惑ったので記載しておきます。

サンプルコードは以下になります。

use std::collections::HashMap;

fn main() {
    let mut map: HashMap<String, Vec<i32>> = HashMap::new();

    //キーを"test"、valueを空のvectorで設定
    map.insert("test".to_string(), vec![]);

    //キー"test"のvalueのvectorに1、2を設定
    map.get_mut(&"test".to_string()).unwrap().push(1);
    map.get_mut(&"test".to_string()).unwrap().push(2);

    println!("{:?}", map);

    //keyがtestの場合のvalueを取得し表示
    println!("{:?}", map.get(&"test".to_string()));

    //keyがtestのvalueを取得し、一つずつ表示
    for i in map.get(&"test".to_string()).unwrap() {
        println!("{}", i);
    }
}

ポイントはvalueの値を変更する際はmap.get_mut(key)のようにget_mutを使ってvalueを取得します。

その際、get_mutのはOption型で帰ってくるので、unwrap()をして値を取り出しています。

また、編集が不要の場合はget_mutではなくgetを使います。こちらも同様に取得結果がOption型になっているのでunwrap()して値を取り出します。

参考までに、上記のコードのアウトプットは以下のような形になります。

{"test": [1, 2]}
Some([1, 2])
1
2

以上になります。

Rustカテゴリの最新記事