You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rust中如何单次查找HashMap并返回插入或获取的可变引用?

在Rust中实现HashMap的「查找或插入并返回可变引用」操作

当然可行,你的思路完全正确,只需对代码做一处小调整:Entry::Occupied分支里的entry不需要加mut,因为OccupiedEntry::get_mut()是&self方法,不需要可变绑定。

修正后的完整代码:

use std::collections::{HashMap, Entry};

fn get(key: u32, map: &mut HashMap<u32, String>) -> &mut String {
    match map.entry(key) {
        Entry::Occupied(entry) => entry.get_mut(),
        Entry::Vacant(entry) => entry.insert("Hello".into()),
    }
}

方案优势

HashMap::entry()方法正是为这类场景设计的:它只执行单次哈希查找,避免了先调用get_mut再调用insert导致的两次哈希计算与表遍历,完全满足你“单次查找”的需求。

使用示例

你可以直接通过返回的可变引用修改对应的值,不管是已存在的还是新插入的:

fn main() {
    let mut map = HashMap::new();
    
    // 插入新值并修改
    let new_val = get(1, &mut map);
    *new_val += " Rust";
    println!("{}", new_val); // 输出: Hello Rust
    
    // 修改已存在的值
    let existing_val = get(1, &mut map);
    *existing_val += "!";
    println!("{}", existing_val); // 输出: Hello Rust!
}

内容的提问来源于stack exchange,提问作者rozina

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 02:35:16