HashMap
Hash map (Mapa de hash) padrão com proteção contra ataques 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!( "Nós sabemos sobre livros {}, mas não 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} påginas"), None => println!("{book} é desconhecido."), } } // Use o método .entry() para inserir um valor caso nada seja encontrado. 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
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
.