Actualizar valor en HashMap mutable
rust (1)
La indexación de forma inmutable y la indexación de forma inmutable se proporcionan mediante dos rasgos diferentes: Index
y IndexMut
, respectivamente.
Actualmente, HashMap
no implementa IndexMut
, mientras que Vec
hace .
La confirmación que eliminó los estados de implementación de IndexMut
HashMap
:
Este compromiso elimina las implementaciones de IndexMut en HashMap y BTreeMap, con el fin de probar la API en el futuro contra la eventual inclusión de un rasgo IndexSet.
Tengo entendido que un rasgo hipotético de IndexSet
le permitiría asignar valores completamente nuevos a un HashMap
, y no solo leer o mutar entradas existentes:
let mut map = HashMap::new();
map["key"] = "value";
Por ahora, puedes usar get_mut
:
*my_map.get_mut("a").unwrap() += 10;
O la entry
API:
*my_map.entry("a").or_insert(42) += 10;
Esto es lo que estoy tratando de hacer:
use std::collections::HashMap;
fn main() {
let mut my_map = HashMap::new();
my_map.insert("a", 1);
my_map.insert("b", 3);
my_map["a"] += 10;
// my expected outputs is my_map becomes {"b": 3, "a": 11}
}
Plantea el siguiente error:
error: cannot assign to immutable indexed content
--> src/main.rs:8:5
|
8 | my_map["a"] += 10;
| ^^^^^^^^^^^^^^^^^ cannot borrow as mutable
Realmente no entiendo lo que eso significa, ya que hice el HashMap
mutable. Cuando intento actualizar un elemento en un vector
, obtengo el resultado esperado:
let mut my_vec = vec!{1,2,3};
my_vec[0] += 10;
println!{"{:?}", my_vec};
// [11, 2, 3]
¿Qué tiene de diferente el HashMap
que recibo el error anterior? ¿Hay alguna manera de actualizar un valor?