HashMap
Mapa hash estándar con protección frente a ataques HashDoS:
Speaker Notes
This slide should take about 5 minutes.
-
HashMap
no se ha explicado en el preludio y debe conocerse. -
Prueba las siguientes líneas de código. La primera línea comprobará si un libro está incluido en el hashmap y, si no, devolverá un valor alternativo. La segunda línea insertará el valor alternativo en el hashmap si el libro no se encuentra.
let pc1 = page_counts .get("Harry Potter y la piedra filosofal") .unwrap_or(&336); let pc2 = page_counts .entry("Los juegos del hambre".to_string()) .or_insert(374);
-
A diferencia de
vec!
, por desgracia no hay ninguna macro estándar dehashmap!
.-
Sin embargo, desde la versión 1.56 de Rust, HashMap implementa [
From<[(K, V); N]>
](https://doc.rust-lang.org/std/collections/hash_map/struct.HashMap.html#impl-From%3C%5B(K,+V);+N%5D%3E-for-HashMap%3CK,+V,+RandomState%, que nos permite inicializar fácilmente un mapa hash a partir de un array literal:let page_counts = HashMap::from([ ("Harry Potter y la piedra filosofal".to_string(), 336), ("Los juegos del hambre".to_string(), 374), ]);
-
-
HashMap también se puede crear a partir de cualquier
Iterator
que genere tuplas de pares clave-valor. -
Mostraremos
HashMap<String, i32>
y evitaremos utilizar&str
para que los ejemplos sean más sencillos. Por supuesto, se pueden usar las referencias en las colecciones, pero pueden dar problemas con el borrow checker.- Prueba a eliminar
to_string()
del ejemplo anterior para ver si aún sigue compilando. ¿Dónde crees que podríamos encontrar problemas?
- Prueba a eliminar
-
Este tipo tiene varios tipos de devolución “específicos del método”, como
std::collections::hash_map::Keys
. Estos tipos a menudo aparecen en las búsquedas de la documentación de Rust. Muestra a los estudiantes la documentación de este tipo y el enlace útil de vuelta al métodokeys
.