gpt4 book ai didi

rust - 如何将 HashMap 的值收集到向量中?

转载 作者:行者123 更新时间:2023-11-29 07:57:58 25 4
gpt4 key购买 nike

我找不到收集 HashMap 值的方法进入 Vec在文档中。我有score_table: HashMap<Id, Score>我想得到所有 Score进入all_scores: Vec<Score> .

我很想使用 values方法 ( all_scores = score_table.values() ),但它不起作用,因为值不是 Vec .

我知道 Values实现 ExactSizeIterator trait,但我不知道如何在不手动编写 for 循环并将值一个接一个地推送到向量中的情况下将迭代器的所有值收集到向量中。

我也试过use std::iter::FromIterator;但结尾是这样的:

all_scores = Vec::from_iter(score_table.values());
expected type `std::vec::Vec<Score>`
found type `std::vec::Vec<&Score>`

感谢Hash map macro refuses to type-check, failing with a misleading (and seemingly buggy) error message? ,我将其更改为:

all_scores = Vec::from_iter(score_table.values().cloned());

并且它不会向 cargo check 产生错误.

这样做好吗?

最佳答案

Iterator.collect 方法专为这个特定任务而设计。你是对的,你需要 .cloned() 如果你想要一个实际值的向量而不是引用(除非存储的类型实现 Copy,像基元一样),所以代码如下所示:

all_scores = score_table.values().cloned().collect();

在内部,collect() 仅使用 FromIterator,但它也推断输出的类型。有时没有足够的信息来推断类型,因此您可能需要明确指定所需的类型,如下所示:

all_scores = score_table.values().cloned().collect::<Vec<Score>>();

关于rust - 如何将 HashMap 的值收集到向量中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56724014/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com