【发布时间】:2021-07-07 23:16:02
【问题描述】:
我正在编写一个函数,它可以将一个值插入或更新到作为结构一部分的 HashMap 中。
我的地图是HashMap<String, Value> 类型,其中Value 是我程序中其他地方定义的枚举。我的结构上有一个函数pub fn bind(&mut self, name: &str, value: Value),它在HashMap 中插入或更新一个条目,目前我的代码如下所示:
pub fn bind(&mut self, name: &str, value: Value) -> /* snip */ {
/* snip */
self.bindings.insert(name.to_string(), value);
/* snip */
}
如果name 还没有在 hashmap 中,这很好,但如果是,是否可以通过更新现有条目来避免 to_string 的开销,而不是调用 to_string 并为一个字符串分配更多内存我们已经有了?我想做这样的事情:
pub fn bind(&mut self, name: &str, value: Value) -> /* snip */ {
/* snip */
if (self.bindings.contains(name)) {
// this update method does not exist
self.bindings.update(name, value);
} else {
self.bindings.insert(name.to_string(), value);
}
/* snip */
}
【问题讨论】:
-
使用当前的 API,您基本上是在必须分配克隆和多次重新计算哈希之间进行权衡。
标签: performance rust