HashMap
Стандартная хеш-таблица с защитой от атак HashDoS:
// Copyright 2023 Google LLC
// SPDX-License-Identifier: Apache-2.0
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!(
"We know about {} books, but not 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} pages"),
None => println!("{book} is unknown."),
}
}
// Используйте метод .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;
}
dbg!(page_counts);
}
-
HashMapне входит в prelude, поэтому её нужно импортировать в область видимости. -
Попробуйте следующие строки кода. Первая строка проверит, есть ли книга в хеш-таблице, и если нет, вернёт альтернативное значение. Вторая строка вставит альтернативное значение в хеш-таблицу, если книга не найдена.
// Copyright 2023 Google LLC // SPDX-License-Identifier: Apache-2.0 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]>, что позволяет легко инициализировать хеш-таблицу из литерала массива:// Copyright 2023 Google LLC // SPDX-License-Identifier: Apache-2.0 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.