I want to insert or update a value in the map, and then get the number of keys.
use std::collections::HashMap;
fn main() {
let mut map = HashMap::new();
let count = map.entry("Tom").or_insert(0);
*count += 1;
let size = map.keys().len();
println!("{} men found", size);
}
The compiler error:
error[E0502]: cannot borrow `map` as immutable because it is also borrowed as mutable
--> src/main.rs:8:16
|
5 | let count = map.entry("Tom").or_insert(0);
| --- mutable borrow occurs here
...
8 | let size = map.keys().len();
| ^^^ immutable borrow occurs here
9 | println!("{} men found", size);
10 | }
| - mutable borrow ends here
Is there any way to work around this? Is the way I wrote it wrong?
Use the size() method to get the count of elements.
HashMap. size() method of HashMap class is used to get the size of the map which refers to the number of the key-value pair or mappings in the Map. Parameters: The method does not take any parameters. Return Value: The method returns the size of the map which also means the number of key-value pairs present in the map.
HashMap can contain null for key and value HashMap can contain null for key and value.
When you mutate a key which is already present in the HashMap you break the HashMap . You are not supposed to mutate keys present in the HashMap .
Choose one of:
Use Rust 2018 or another version of Rust with non-lexical lifetimes:
use std::collections::HashMap;
fn main() {
let mut map = HashMap::new();
let count = map.entry("Tom").or_insert(0);
*count += 1;
let size = map.keys().len();
println!("{} men found", size);
}
Don't create a temporary value:
*map.entry("Tom").or_insert(0) += 1;
Add a block to constrain the borrow:
{
let count = map.entry("Tom").or_insert(0);
*count += 1;
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With