scala:使用map.keys中的键创建地图

dum*_*ng3 0 scala hashmap

我有一张地图,让我们说:

m1:Map[String, Int] = Map(a -> 1, b -> 2, c -> 3, d -> 4)
Run Code Online (Sandbox Code Playgroud)

我现在想要创建第二个映射,它与现有映射具有相同的键,并为每个键取0作为值.所以看起来应该是这样的:

m2:Map[String, Int] = Map(a -> 0, b -> 0, c -> 0, d -> 0)
Run Code Online (Sandbox Code Playgroud)

我在地图定义中尝试了一个for循环,但它并没有真正起作用.我怎样才能做到这一点?

谢谢!

elm*_*elm 5

考虑创建新地图

m1.keys.map(k => (k,0)).toMap
Run Code Online (Sandbox Code Playgroud)

并使用一个理解,

for ( (k,v) <- m1 ) yield k -> 0
Run Code Online (Sandbox Code Playgroud)

上面的方法创建了一个新的地图.这与使用mapValues它创建原始地图的视图并保持每次查询时应用于原始地图的变换函数形成对比.只要转换函数是引用透明的,即它不依赖于上下文,这种方法就是合理的.但是,当转换函数引用的上下文更改时,查询到原始映射的输出也可能会发生变化.通过创建新的转换后的地图可以防止这种情况.