Avatar ·

Rust中HashMap的高效查找与插入:如何避免双重哈希?

大家好!我正在学习Rust,遇到了一个典型问题:如果key存在,需要更新HashMap中的值;如果key不存在,则插入新键值对。问题在于,我分两步操作:先用contains_key()检查key是否存在,然后再插入或修改值。但据我理解,这会导致双重哈希——一次在检查时,一次在插入时。对于大型字典来说,这似乎效率不高。

以下是我当前的代码:

use std::collections::HashMap;

fn update_or_insert(map: &mut HashMap<String, i32>, key: &str, value: i32) {
    if map.contains_key(key) {
        // 更新现有值
        if let Some(val) = map.get_mut(key) {
            *val = value;
        }
    } else {
        // 插入新值
        map.insert(key.to_string(), value);
    }
}

这段代码能工作,但我担心contains_ke