为了账号安全,请及时绑定邮箱和手机立即绑定

如何有效地查找和插入HashMap?

如何有效地查找和插入HashMap?

如何有效地查找和插入HashMap?我想做以下几点:查找aVec用于特定的密钥,并将其存储以供以后使用。如果不存在,则创建一个空Vec但仍然保留在变量中。如何有效地做到这一点?很自然,我想我可以match:use std::collections::HashMap;// This code doesn't compile.let mut map = HashMap::new();let key = "foo";let values: &Vec<isize> = match map.get(key) {     Some(v) => v,     None => {         let default: Vec<isize> = Vec::new();         map.insert(key, default);         &default    }};当我尝试的时候,它给了我一些错误,比如:error[E0502]: cannot borrow `map` as mutable because it is also borrowed as immutable   --> src/main.rs:11:13    | 7  |     let values: &Vec<isize> = match map.get(key) {    |                                     --- immutable borrow occurs here ... 11 |             map.insert(key, default);    |             ^^^ mutable borrow occurs here ... 15 | }    | - immutable borrow ends here最后我做了这样的事情,但我不喜欢它执行两次查找的事实(map.contains_key和map.get):// This code does compile.let mut map = HashMap::new();let key = "foo";if !map.contains_key(key) {     let default: Vec<isize> = Vec::new();     map.insert(key, default);}let values: &Vec<isize> = match map.get(key) {     Some(v) => v,     None => {         panic!("impossiburu!");     }};有一个安全的方法吗?match?
查看完整描述

2 回答

?
SMILET

TA贡献1796条经验 获得超4个赞

您可以使用v.key()在表达式中default,然后它将获得对该键的引用,因为它存在于hashmap中,因此您可以这种方式避免克隆。

查看完整回答
反对 回复 2019-06-29
  • 2 回答
  • 0 关注
  • 869 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信