Rust中如何检查HashMap<i32,i32>含大于0值并修正错误代码?
解决Rust HashMap检查值是否大于0的问题
嘿,我来帮你搞定这个问题!你的代码出错的原因很明确:当你调用HashMap的iter()方法时,它返回的是键值对的引用迭代器——每个元素都是(&i32, &i32)这样的元组,而不是单个的数值。你原来的闭包|*x|试图直接解构这个元组,但写法不对,而且你其实只需要关心元组里的第二个元素(也就是值)对吧?
给你几种正确的写法,按需选择:
方法1:解构键值对元组(忽略键)
如果你只需要检查值,就可以忽略键,用_占位:
// 写法A:直接解构出值的引用并解引用 let has_demand = minimums.iter().any(|(_, &value)| value > 0); // 写法B:先拿到值的引用,再手动解引用 let has_demand = minimums.iter().any(|(_, value)| *value > 0);
两种写法效果完全一样,选你看着顺眼的就行。
方法2:直接遍历值(更简洁)
如果你根本不需要用到键,推荐用HashMap的values()方法,它会直接返回值的引用迭代器,代码更简洁:
// 同样两种等价写法 let has_demand = minimums.values().any(|&value| value > 0); // 或者 let has_demand = minimums.values().any(|value| *value > 0);
简单总结下:你原来的错误是没意识到iter()返回的是键值对元组,而不是单个值。只要正确处理这个元组的解构,或者用values()跳过键的处理,就能解决问题啦!
内容的提问来源于stack exchange,提问作者kameranis
相关产品推荐
相关产品推荐

