最近在学习迭代器时遇到了一个问题。我尝试将数字列表转换为
Vec
,但是当我将类型更改为 HashMap
时,没有发生错误。例如:
type Test = Vec<(usize, Vec<usize>)>;
// type TestHashMap = HashMap<usize, Vec<usize>>;
...
fn make_heavy_things() -> Test {
let x = (1..=10).map(|v| (v, vec![v])).collect();
x
}
// x can be a HashMap or Vec depending on the return type
这两种类型似乎都可以正常工作,并且像
len()
这样的常见方法可以按预期工作。我很好奇这种行为背后的原因。
Rust 中为什么可以将 Range 收集到 HashMap 或 Vec 中?
范围不能收集到哈希映射中,哈希映射需要键和值对,范围不是,您的迭代器不是范围,它是映射到一对(usize, Vec<usize>)
的范围。
我很好奇这种行为背后的原因。是一个通用操作,它可以收集到任何实现
FromIterator
特质的东西中,这是
Vec
和HashMap
的情况,IFF迭代器返回对(2-uples)该对的第一个元素实现
Hash + Eq
。
这提供了类型安全的一站式服务,用于将迭代器转换为各种形式,并允许有用的组合,例如,您可以将 Result
的迭代器收集到单个
Result
中,它将在第一个处停止
Result::Err
它遇到并返回它,否则将收集到您指定的任何具体集合中
我最近遇到一个问题为什么会出现问题?