在Rust中,有没有一种方法可以使用HashMap并获得值的向量?[副本]

db2dz4w8  于 2023-10-20  发布在  其他
关注(0)|答案(2)|浏览(125)

此问题已在此处有答案

How do I collect the values of a HashMap into a vector?(3个答案)
15天前关闭。
我有一个hashmap: HashMap<SomeKey, SomeValue>,我想消费hashmap并获得它的所有值作为一个向量。
我现在的做法是

let v: Vec<SomeValue> = hashmap.values().cloned().collect();

cloned复制每个值,但这种构造不会消耗散列表。我很乐意使用Map。
有没有什么方法可以在不复制的情况下获取值?

hfyxw5xn

hfyxw5xn1#

将整个HashMap转换为迭代器并丢弃键:

use std::collections::HashMap;

fn only_values<K, V>(map: HashMap<K, V>) -> impl Iterator<Item = V> {
    map.into_iter().map(|(_k, v)| v)
}

然后,您可以对迭代器做任何您想做的事情,包括将其收集到Vec<_>中。
另请参阅:

tf7tbtn2

tf7tbtn22#

从Rust 1.54开始,你可以使用HashMap::into_values

let v: Vec<_> = hashmap.into_values().collect();

相关问题