rust - 在不克隆的情况下获得 HashMap.get() 结果的所有权
问题描述
有没有比这一行更有效的从 HashMap 获取拥有值的方法?
let output_items = output_tables.get(TABLE_NAME_TLIST).unwrap().to_owned();
此屏幕截图扩展了类型:
解决方案
如果您想获得该值的所有权,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>>
.
推荐阅读
- ios - Auth0 获取未通过身份验证的元数据
- python - 如何在 Python 中计算文件中单词的频率?
- c# - C# - 在字符串列表列表中重复而不是正确的值
- javascript - SyntaxError:编译 ejs 时 index.ejs 中出现意外标识符
- r - 如何使“dplyr select”使用字符参数的值而不是其名称作为文字?
- javascript - JavaScript OAuth 弹出窗口处理程序代码
- mysql - MySQL 数据库中 DATE 和 TIME 向用户显示时间的最佳数据类型是什么?
- algorithm - 二分搜索平方根实现
- html - 复选框始终位于其标签的左侧,如何将其移动到右侧?
- c - 我如何使二叉搜索树与拼写检查器的按字母顺序排列的单词列表一起使用?