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
以上になります。
コメントを書く