Читаем Rust на примерах полностью

==4401== in use at exit: 0 bytes in 0 blocks

==4401== total heap usage: 18 allocs, 18 frees, 1,648 bytes allocated

==4401==

==4401== All heap blocks were freed -- no leaks are possible

==4401==

==4401== For counts of detected and suppressed errors, rerun with: -v

==4401== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)

<p id="hashmap"><strong><a l:href="#hashmap">HashMap</a></strong></p>

В то время как вектора сохраняют значения с числовыми индексами, 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.

<p id="Альтернативные_пользовательские_типы_ключей"><strong><a l:href="#Альтернативные_пользовательские_типы_ключей">Альтернативные (пользовательские) типы ключей</a></strong></p>

Любой тип, реализующий типажи Eq и Hash могут являться ключами в HashMap. Туда входят:

Перейти на страницу:

Похожие книги

Компьютерные сети. 6-е изд.
Компьютерные сети. 6-е изд.

Перед вами шестое издание самой авторитетной книги по современным сетевым технологиям, написанное признанным экспертом Эндрю Таненбаумом в соавторстве со специалистом компании Google Дэвидом Уэзероллом и профессором Чикагского университета Ником Фимстером. Первая версия этого классического труда появилась на свет в далеком 1980 году, и с тех пор каждое издание книги неизменно становилось бестселлером. В книге последовательно изложены основные концепции, определяющие современное состояние компьютерных сетей и тенденции их развития. Авторы подробно объясняют устройство и принципы работы аппаратного и программного обеспечения, рассматривают все аспекты и уровни организации сетей — от физического до прикладного. Изложение теоретических принципов дополняется яркими, показательными примерами функционирования интернета и компьютерных сетей различного типа. Большое внимание уделяется сетевой безопасности. Шестое издание полностью переработано с учетом изменений, произошедших в сфере сетевых технологий за последние годы, и, в частности, освещает такие технологии, как DOCSIS, 4G и 5G, беспроводные сети стандарта 802.11ax, 100-гигабитные сети Ethernet, интернет вещей, современные транспортные протоколы CUBIC TCP, QUIC и BBR, программно-конфигурируемые сети и многое другое.

Дэвид Уэзеролл , Ник Фимстер , Эндрю Таненбаум

Учебные пособия, самоучители