我有一张地图,让我们说:
m1:Map[String, Int] = Map(a -> 1, b -> 2, c -> 3, d -> 4)
我想创建第二个映射,它与现有映射具有相同的键,并为每个键取0作为值。所以看起来应该是这样的:
m2:Map[String, Int] = Map(a -> 0, b -> 0, c -> 0, d -> 0)
我在地图定义中尝试了一个for循环,但它确实没有用。我怎么能这样做?
谢谢!
答案 0 :(得分:5)
要创建新地图,请考虑
m1.keys.map(k => (k,0)).toMap
并使用for comprehension,
for ( (k,v) <- m1 ) yield k -> 0
上述方法创建了一个新地图。这与使用mapValues
形成对比,IHttpModule
创建原始地图的视图并保留转换函数,该函数在查询时应用于原始地图。只要转换函数是引用透明的,即它不依赖于上下文,这种方法就是合理的。但是,当转换函数引用的上下文更改时,查询到原始映射的输出也可能会发生变化。通过创建新的转换后的地图可以防止这种情况。
答案 1 :(得分:2)
你可以mapValues
:
val m2 = m1.mapValues((v) -> 0)
编辑:请阅读@ elm关于参考含义的答案