作者:btbxin | 来源:互联网 | 2022-10-20 12:04
我是Rust的新手,在文档中找不到将hashmap的值收集到向量中的方法。
假设我有一个哈希图:
score_table: HashMap
我想所有的Score
成Vec
all_scores: Vec
我很想使用,values
但由于值不是vec,所以它不起作用:
all_scores = score_table.values()
我知道可以Values
实现该ExactSizeIterator
特征,但是我不知道如何将迭代器的所有值收集到向量中,而无需手动编写for循环并将向量中的值一个接一个地推入。
[编辑1]
我还尝试着use std::iter::FromIterator;
降落到类似:
all_scores = Vec::from_iter(score_table.values());
expected type `std::vec::Vec`
found type `std::vec::Vec<&Score>`
[编辑2]
由于这个问题,我将其更改为:
all_scores = Vec::from_iter(score_table.values().cloned());
并且不会对产生错误cargo check
。
这是一个好方法吗?
1> apemanzilla..:
该方法Iterator.collect
是为此特定任务而设计的。正确的是,您需要.cloned()
一个实际值向量而不是引用(除非存储的类型实现Copy
,例如基元),因此代码如下所示:
all_scores = score_table.values().cloned().collect();
在内部,collect()
仅使用FromIterator
,但它也可以推断输出的类型。有时没有足够的信息来推断类型,因此您可能需要显式指定所需的类型,如下所示:
all_scores = score_table.values().cloned().collect::>();