HashMap
Стандартна хеш-карта із захистом від HashDoS-атак:
use std::collections::HashMap; fn main() { let mut page_counts = HashMap::new(); page_counts.insert("Adventures of Huckleberry Finn", 207); page_counts.insert("Grimms' Fairy Tales", 751); page_counts.insert("Pride and Prejudice", 303); if !page_counts.contains_key("Les Misérables") { println!( "Ми знаємо про {} книги, але не Les Misérables.", page_counts.len() ); } for book in ["Pride and Prejudice", "Alice's Adventure in Wonderland"] { match page_counts.get(book) { Some(count) => println!("{book}: {count} сторінок"), None => println!("{book} невідома."), } } // Використовуйте метод .entry(), щоб вставити значення, якщо нічого не знайдено. for book in ["Pride and Prejudice", "Alice's Adventure in Wonderland"] { let page_count: &mut i32 = page_counts.entry(book).or_insert(0); *page_count += 1; } println!("{page_counts:#?}"); }
- 
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.