В то время как вектора сохраняют значения с числовыми индексами, HashMap сохраняют значения по ключу. Ключи HashMap могут иметь логический, числовой, строковый или любой другой тип данных, который реализует типажи Eq и Hash. Подробнее об этом в следующей главе.
Как и вектора, HashMap расширяемые, но они также могут и сжать себя, когда у них появляется избыточное пространство. Вы можете создать хэш-карту с определённой размерностью при помощи HashMap::with_capacity(uint) или использовать HashMap::new() для получения хэш-карты с размерностью по умолчанию (рекомендуется).
use std::collections::HashMap;
fn call(number: &str) -> &str {
match number {
"798-1364" => "Абонент выключен или находится вне зоны действия сети.
Пожалуйста, позвоните позднее.",
"645-7689" => "Здравствуйте, это Mr. Awesome's Pizza. Меня зовут Фред.
Что я могу сделать для вас?",
_ => "Привет! Кто это опять?"
}
}
fn main() {
let mut contacts = HashMap::new();
contacts.insert("Даниель", "798-1364");
contacts.insert("Эшли", "645-7689");
contacts.insert("Кейти", "435-8291");
contacts.insert("Роберт", "956-1745");
// Возьмём ссылку и вернём `Option<&V>`
match contacts.get(&"Даниель") {
Some(&number) => println!("Звоним Даниелю: {}", call(number)),
_ => println!("У нас нет номера Даниеля."),
}
// `HashMap::insert()` вернёт `None`, если мы добавляем
// новое значение, иначе - `Some(value)`
contacts.insert("Даниель", "164-6743");
match contacts.get(&"Эшли") {
Some(&number) => println!("Звоним Эшли: {}", call(number)),
_ => println!("У нас нет номера Эшли."),
}
contacts.remove(&"Эшли");
// `HashMap::iter()` возвращает итератор, который в произвольном
// порядке отдаёт пары `(&'a key, &'a value)`.
for (contact, &number) in contacts.iter() {
println!("Звоним {}: {}", contact, call(number));
}
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Для большей информации о том, как работает хеширование и хэш-карты (который иногда называются хэш-таблицами), вы можете обратиться к Wikipedia.