Wie kann ich ein update ein Wert in einer veränderlichen HashMap?
Hier ist, was ich versuche zu tun:
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;
//I expect my_map becomes {"b": 3, "a": 11}
}
Aber das wirft einen Fehler:
Rust 2015
error[E0594]: cannot assign to immutable indexed content
--> src/main.rs:8:5
|
8 | my_map["a"] += 10;
| ^^^^^^^^^^^^^^^^^ cannot borrow as mutable
|
= help: trait `IndexMut` is required to modify indexed content, but it is not implemented for `std::collections::HashMap<&str, i32>`
Rost 2018
error[E0594]: cannot assign to data in a `&` reference
--> src/main.rs:8:5
|
8 | my_map["a"] += 10;
| ^^^^^^^^^^^^^^^^^ cannot assign
Ich nicht wirklich verstehen, was das bedeutet, da ich aus der HashMap
verändert werden. Wenn ich versuche zu aktualisieren, ein element in einem vector
, bekomme ich das erwartete Ergebnis:
let mut my_vec = vec![1, 2, 3];
my_vec[0] += 10;
println! {"{:?}", my_vec};
//[11, 2, 3]
Was ist anders an HashMap
, dass ich immer den oben genannten Fehler? Gibt es eine Möglichkeit, um einen Wert zu aktualisieren?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Indizierung immutably und Indizierung mutably vorgesehen sind, durch zwei verschiedene Merkmale:
Index
undIndexMut
, beziehungsweise.Derzeit
HashMap
nicht implementiertIndexMut
, währendVec
nicht.Die commit entfernt
HashMap
'sIndexMut
Umsetzung Staaten:Es ist mein Verständnis, dass eine hypothetische
IndexSet
Eigenschaft würde es erlauben, Sie zu ordnen brand-neue Werte einHashMap
, und nicht nur zu Lesen oder mutieren bestehende Einträge:Für jetzt, können Sie
get_mut
:Oder die
Eintrag
API:IndexSet
Merkmal umgesetzt würde.*my_map.entry("a").or_insert(42) += 10;
Whad tut * zu tun? Dereferenzieren für welchen Teil?(*(my_map.entry("a").or_insert(42))) += 10;