如何不使用循环通过iter_mut()修改HashMap?
解决方案
你可以利用迭代器的for_each方法替代显式循环,它本质是迭代器内置的遍历逻辑,写法更简洁:
use std::collections::HashMap; fn main() { let mut map: HashMap<&str, i32> = [("a", 1), ("b", 2), ("c", 3)].into(); map.iter_mut().for_each(|(_, val)| *val *= 2); // 验证结果:map 现在为 {"a":2, "b":4, "c":6} }
说明
iter_mut()返回的可变迭代器自带for_each方法,会对迭代器内每个元素执行传入的闭包操作,效果和原for循环完全一致,只是更偏向函数式风格。- 闭包里用
(_, val)忽略了键的部分,直接对可变引用的val执行翻倍操作,和原循环逻辑完全等价。
内容的提问来源于stack exchange,提问作者jyz
相关产品推荐
相关产品推荐

