无需克隆即可获取 HashMap.get() 结果的所有权

max*_*max 8 rust

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

let output_items = output_tables.get(TABLE_NAME_TLIST).unwrap().to_owned();
Run Code Online (Sandbox Code Playgroud)

此屏幕截图扩展了类型:

代码片段

Cor*_*ien 16

如果您想获得该值的所有权,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);
}
Run Code Online (Sandbox Code Playgroud)

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