【发布时间】:2019-12-17 16:35:59
【问题描述】:
我编写的算法构建了一个临时的HashMap。完成后,我只对哈希图的values 感兴趣,因此我想将值的所有权从HashMap<K, V> 转移到Vec<V>。
使用简化的哈希图示例:
fn main() {
use std::collections::HashMap;
let mut h: HashMap<_, _> = HashMap::new();
h.insert(1, "foo".to_owned());
}
我能做到:
-
let vals: Vec<&String> = h.values().collect();- 简短而甜蜜,但 hashmap 仍然拥有这些值; -
let vals: Vec<String> = h.values().cloned().collect()(如this question) - 结果是我需要的,但我被教导要避免额外的克隆; -
let vals: Vec<String> = h.into_iter().map(|(_k, v)| v).collect();- 无需克隆即可满足我的需求,但有点丑。
实际值是一个中等大小的结构体({String, Vec<String>},总共不到 KB)。
在这种情况下我应该默认避免clone 还是过早优化?有没有我想念的惯用方式来做到这一点?
【问题讨论】:
标签: rust