热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

在两个哈希映射之间交换值

如何解决《在两个哈希映射之间交换值》经验,为你挑选了1个好方法。

我有两个HashMaps,并希望在某些条件下交换它们之间的值.如果第二个密钥不存在HashMap,则应插入密钥.我不想克隆该值,因为这太贵了.

(简化的)关键代码不起作用如下:

match hm1.get_mut(&1) {
    Some(ref mut x) => match hm.entry(1) {
        Entry::Occupied(mut y) => if y.get().replace {
            mem::swap(x, &mut y.get_mut());
        },
        Entry::Vacant(y) => {
            y.insert(mem::replace(x, dummy));
        }
    },
    NOne=> {}
}

(在Rust Playground)

我收到错误:

error[E0597]: `y` does not live long enough
  --> src/main.rs:28:9
   |
23 |                 mem::swap(x, &mut y.get_mut());
   |                                   - borrow occurs here
...
28 |         },
   |         ^ `y` dropped here while still borrowed
29 |         NOne=> {}
30 |     }
   |     - borrowed value needs to live until here

我对这个借用问题感到很困惑,我没有办法解决这个问题.如果我替换了Entry一个match hm.get_mut(1),我不能插入的None情况下,因为匹配可变地借用了HashMap.



1> loganfsmyth..:

您将参考您应该提供参考的参考文献.

&mut y.get_mut()

例如是

&mut &mut ExpensiveStruct

你有一个类似的问题

match hm1.get_mut(&1) {
    Some(ref mut x) =>

当类型被修剪为以下时,您的代码按预期工作&mut ExpensiveStruct:

match hm1.get_mut(&1) {
    Some(x) => match hm.entry(1) {
        Entry::Occupied(mut y) => if y.get().replace {
            mem::swap(x, y.get_mut());

(在游乐场)

请注意,它已ref mut被删除,因为hm1.get_mut(&1)已经返回Option一个可变引用,并且&mut因为y.get_mut()已经返回引用而被删除.


推荐阅读
author-avatar
天晴的故事_665
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有