Вектор в HashMap

Я знаю, как использовать String Я знаю, как использовать Вектор Но у меня возникла проблема с использованием HashMap.

#[derive(Serialize)]
pub struct TestStructs {
    pub ttStrngg: String,
    pub ttVctorr: Vec<String>,
    pub ttHshMpp: HashMap<String, Vec<String>>,
}

Вот что я пытаюсь

У вас нет проблем со String

ttStrngg: "Stringgg".to_string(),

С Вектором проблем нет.

ttVctorr: vec!["VecStr1".to_string(), "VecStr2".to_string()],

Но есть проблема с HashMap ttHshMpp: "HMK1".to_string(), vec!["K1V1".to_string(), "K1V2".to_string()],

Я поделился тем, что пробовал, и теперь ищу недостающую вещь в HashMap.

Вот ссылка на Rust Playground, чтобы попробовать свою собственную

https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=68a35bc3f9afc3be47d9d8219d4a6f2a

И вот ошибка

    Compiling playground v0.0.1 (/playground)
error: expected one of `,`, `:`, or `}`, found `!`
 --> src/main.rs:9:46
  |
6 |     let ttStrctts = TestStructs {
  |                     ----------- while parsing this struct
...
9 |             ttHshMpp: "HMK1".to_string(), vec!["K1V1".to_string(), "K1V2".to_string()]
  |                                           ---^ expected one of `,`, `:`, or `}`
  |                                           |
  |                                           while parsing this struct field

error[E0308]: mismatched types
 --> src/main.rs:9:23
  |
9 |             ttHshMpp: "HMK1".to_string(), vec!["K1V1".to_string(), "K1V2".to_string()]
  |                       ^^^^^^^^^^^^^^^^^^ expected `HashMap<String, Vec<String>>`, found `String`
  |
  = note: expected struct `HashMap<std::string::String, Vec<std::string::String>>`
             found struct `std::string::String`
Почему Python в конце концов умрет
Почему Python в конце концов умрет
Последние 20 лет были действительно хорошими для Python. Он прошел путь от "просто языка сценариев" до основного языка, используемого для написания...
0
0
61
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Мы можем напрямую инициализировать член с помощью

ttHshMpp: HashMap::from([("HMK1".to_string(), vec!["K1V1".to_string(), "K1V2".to_string()])]),

См. документацию HashMap::from().

Внутренний () определяет каждую пару (k, v), а [] обозначает массив, содержащий эти пары.
Здесь у нас есть только одна пара, тогда это приводит к обозначению ([(...)]), которое может выглядеть странно, но является просто специфической формой общего случая.

Другие вопросы по теме