我目前的尝试:
let fruits:Vec<&str> = vec!["Banana", "Peach"];
let fruits_hashmap: HashMap<_, _> = HashMap::from_iter([("Apple", 2),("Banana", 4),("Peach", 8)]);
let mut n = 0;
let c = fruits.iter().map(|s|
match fruits_hashmap.get(s) {
Some(value) => n |= value,
None => println!("{} does not exist", s)
});
return n;
但我得到warning: unused variable: fruits_hashmap
,n也等于0,但它应该等于12。
2条答案
按热度按时间oknwwptz1#
我猜你添加了
let c =
,因为你之前有另一个警告:然而,这不是解决办法。正如警告所说,
iterators are lazy and do nothing unless consumed
。你需要的不是map()
,而是一个for
循环:ds97pgxw2#
map
创建了一个新的迭代器,但实际上并没有对它进行编译:这就是为什么fruits_hashmap
没有被使用。你可以 * 使用这个迭代器,然后用for
循环将它重新编译,或者收集它,但是,最好避免map
中的副作用。可以使用for_each
: