【发布时间】:2022-01-21 17:08:01
【问题描述】:
我想在将IntoIterator 收集到HashMap 时检测并警告日志中的冲突。当前 Rust 收集到 HashMap 的行为是用最新的值静默覆盖早期的值。
fn main() {
let a = vec![(0, 1), (0, 2)];
let b: std::collections::HashMap<_, _> = a.into_iter().collect();
println!("{}", b[&0]);
}
输出:
2
一种可能的解决方法是收集到Vec,然后手动编写转换代码,但这会引入额外的分配开销和不可读的代码。不消耗原始集合并比较 len()s 的噪音较小,但仍会占用多 1 倍的内存(?)并且无法检测到碰撞发生的确切位置。
有没有更优雅的方式来处理HashMap 冲突?
【问题讨论】: