首页 > 解决方案 > 在不克隆的情况下获得 HashMap.get() 结果的所有权

问题描述

有没有比这一行更有效的从 HashMap 获取拥有值的方法?

let output_items = output_tables.get(TABLE_NAME_TLIST).unwrap().to_owned();

此屏幕截图扩展了类型:

代码片段

标签: rust

解决方案


如果您想获得该值的所有权,HashMap::remove()将返回 anOption<T>而不是Option<&T>返回 by HashMap::get()。看到这个游乐场

use std::collections::HashMap;

fn main() {
    let mut map = HashMap::new();
    map.insert(1, "a");
    assert_eq!(map.remove(&1), Some("a"));
    assert_eq!(map.remove(&1), None);
}

如果您希望该值保留在 中,HashMap但同时在其他地方拥有该值,您可以将其包装在 anRc<T>中以共享所有权。如果对象需要是可变的,您可以将其包装在Rc<RefCell<T>>.


推荐阅读