插入或更新值后如何获取HashMap中的键数?

Ken*_*eth 7 rust borrow-checker

我想在地图中插入或更新一个值,然后获取键的数量。

 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);
}
Run Code Online (Sandbox Code Playgroud)

编译器错误:

 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);
}
Run Code Online (Sandbox Code Playgroud)

有没有办法解决这个问题?是我写的方式不对吗?

She*_*ter 9

选择以下之一:

  1. 使用 Rust 2018 或其他具有非词法生命周期的 Rust 版本:

    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);
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 不要创建临时值:

    *map.entry("Tom").or_insert(0) += 1;
    
    Run Code Online (Sandbox Code Playgroud)
  3. 添加一个块来限制借用:

    {
        let count = map.entry("Tom").or_insert(0);
        *count += 1;
    }
    
    Run Code Online (Sandbox Code Playgroud)