在不克隆HashMap.get()结果的情况下拥有它

7

从HashMap中获取所拥有的值是否有比这行代码更有效率的方式?

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

这个屏幕截图用于扩展类型:

代码片段


你想从HashMap中取出吗? - PiRocks
1个回答

15

如果您想拥有该值的所有权,HashMap::remove() 将返回一个 Option<T> 而不是由 HashMap::get() 返回的 Option<&T>。请参见此播放区

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中,但也想在其他地方拥有该值的所有权,则可以将其包装在Rc中以共享所有权。如果对象需要可变性,则可以将其包装在Rc>中。

谢谢。这真的加强了“所有权”的概念。作为来自Python世界的人,我没有想到移除和拥有所有权在语义上如此接近。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接