【Rust】structの中でhashmapを使用したい

まずはhashmapから

use std::collections::HashMap;

fn main(){
    let mut map = HashMap::new();
    map.insert("x", 10);
    map.insert("y", 20);
    map.insert("z", 30);
    
    for (k, v) in &map {
        println!("{} {}", k, v);
    }

}

これを構造体で使いたい

#[derive(Debug)]
struct Name {
    name: HashMap<String, String>,
    age: u32,
}

fn main(){
    let mut n = Name { name: HashMap::new(), age: 20 };
    n.name.insert("Yamada".to_string(), "Taro".to_string());
    
    println!("{:?}", n);
}

上記でもできるのはできるけど、一発で書きたい

fromを使えば以下で行ける。

#[derive(Debug)]
struct Name {
    name: HashMap<String, String>,
    age: u32,
}

fn main(){
    let mut n = Name { name: HashMap::from([("yamada".to_string(), "taro".to_string())]), age: 20 };
    println!("{:?}", n);
}

Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.39s
Running `target/debug/sample`
Name { name: {“yamada”: “taro”}, age: 20 }

HashMap::from(“yamada”.to_string(), “taro”.to_string()) だと上手くいかないので注意が必要。セットが一つでも[]で囲ってあげる必要あり。