HashMap
Hash map (Mapa de hash) padrão com proteção contra ataques HashDoS:
Speaker Notes
This slide should take about 5 minutes.
-
HashMap
nĂŁo estĂĄ definido no prelĂșdio e precisa ser incluĂdo no escopo. -
Tente as seguintes linhas de cĂłdigo. A primeira linha verĂĄ se um livro estĂĄ no hash map e, caso nĂŁo esteja, retorna um valor alternativo. A segunda linha irĂĄ inserir o valor alternativo no hash map se o livro nĂŁo for encontrado.
let pc1 = page_counts .get("Harry Potter and the Sorcerer's Stone") .unwrap_or(&336); let pc2 = page_counts .entry("The Hunger Games".to_string()) .or_insert(374);
-
Ao contrĂĄrio de
vec!
, infelizmente nĂŁo existe uma macrohashmap!
padrĂŁo.-
Entretanto, desde o Rust 1.56, o HashMap implementa
From<[(K, V); N]>
, o que nos permite inicializar facilmente um hash map a partir de uma matriz literal:let page_counts = HashMap::from([ ("Harry Potter and the Sorcerer's Stone".to_string(), 336), ("The Hunger Games".to_string(), 374), ]);
-
-
Alternativamente, o HashMap pode ser construĂdo a partir de qualquer
Iterator
que produz tuplas de chave-valor. -
Estamos mostrando
HashMap<String, i32>
, e evite usar&str
como chave para facilitar os exemplos. Ă claro que o uso de referĂȘncias em coleçÔes pode ser feito, mas isto pode levar a complicaçÔes com o verificador de emprĂ©stimos.- Tente remover
to_string()
do exemplo acima e veja se ele ainda compila. Onde vocĂȘ acha que podemos ter problemas?
- Tente remover
-
Este tipo tem vĂĄrios tipos de retorno âespecĂficos do mĂ©todoâ, como
std::collections::hash_map::Keys
. Esses tipos geralmente aparecem em pesquisas nos documentos do Rust. Mostre aos alunos os documentos para este tipo e o link Ăștil de volta ao mĂ©todokeys
.