HashMap

Стандартна хеш-карта із захистом від HashDoS-атак:

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Speaker Notes

This slide should take about 5 minutes.
  • HashMap не визначено в prelude, і ії потрібно включити в область.

  • Спробуйте наступні рядки коду. У першому рядку буде показано, чи є книга в хеш-мапі, і якщо ні, повернеться альтернативне значення. У другому рядку буде вставлено альтернативне значення в хеш-мапу, якщо книга не знайдена.

    let pc1 = page_counts .get("Harry Potter and the Sorcerer's Stone") .unwrap_or(&336); let pc2 = page_counts .entry("The Hunger Games") .or_insert(374);
  • На відміну від vec!, на жаль, немає стандартного макросу hashmap!.

    • Хоча, починаючи з Rust 1.56, в HashMap реалізовано From<[[(K, V); N]>, що дозволяє легко ініціалізувати хеш-карту з літерального масиву:

      let page_counts = HashMap::from([ ("Harry Potter and the Sorcerer's Stone".to_string(), 336), ("The Hunger Games".to_string(), 374), ]);
  • Крім того, HashMap можна створити з будь-якого Iterator, який видає кортежі ключ-значення.

  • Цей тип має кілька “специфічних” типів повернення, таких як std::collections::hash_map::Keys. Ці типи часто з’являються під час пошуку в документації Rust. Покажіть учням документацію для цього типу та корисне посилання на метод keys.