Rust hash update value
-
entry
-
new
-
or_insert
-
Using the
or_insertmethod we can update a value and insert a default value in case the key did not exist.
use std::collections::HashMap;
fn main() {
let mut counter = HashMap::new();
*counter.entry("apple").or_insert(0) += 1;
println!("{:#?}", counter);
*counter.entry("banana").or_insert(0) += 1;
println!("{:#?}", counter);
*counter.entry("apple").or_insert(0) += 1;
println!("{:#?}", counter);
}
{
"apple": 1,
}
{
"banana": 1,
"apple": 1,
}
{
"banana": 1,
"apple": 2,
}
use std::collections::HashMap;
fn main() {
let mut grades = HashMap::new();
grades.insert(String::from("Joe"), 70); // create
println!("{}", grades["Joe"]);
grades.insert(String::from("Joe"), 71); // overwite
println!("{}", grades["Joe"]);
grades.entry(String::from("Jane")).or_insert(80); // inserts if the key did not exist
println!("{}", grades["Jane"]);
grades.entry(String::from("Jane")).or_insert(81); // does not change the value
println!("{}", grades["Jane"]);
// inplace change of value (defaults to 0 if key does not exist)
let value = grades.entry(String::from("Joe")).or_insert(0);
*value += 1;
println!("{}", grades["Joe"]);
// the same, no need for temporary variable
*grades.entry(String::from("Joe")).or_insert(0) += 1;
println!("{}", grades["Joe"]);
// This did not exists so defaults to 0
*grades.entry(String::from("George")).or_insert(0) += 1;
println!("{}", grades["George"]);
}