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