2014-03-28 63 views

回答

10
scala> m.mapValues(_.toInt) 
res0: scala.collection.immutable.Map[String,Int] = Map(a -> 1, b -> 2, c -> 3) 
+1

注意:与大多数Scala中的集合转换不同,'mapValues'是懒惰的 - 每次引用地图值时都会应用转换函数。 – ghik

5

正如Brian的回答显示,mapValues是做到这一点的最好办法。

可以实现使用模式匹配相同的效果,这应该是这样的:

m.map{ case (k, v) => (k, v.toInt)} 

和(如果你想改变的关键,以及例如)在其他情况下非常有用。

请记住,您正在对Map中的每个条目进行模式匹配,表示为tuple2,而不是整个地与Map对齐。

您还必须使用围绕case声明的大括号{},以保持编译器的快乐。

+0

花括号不是强制性的,但风格上更好。 – euphoria83

+0

在这种特殊情况下(不是双关语),它们是必需的。用圆括号替换它们会产生:'错误:简单表达式的非法启动“。另见http://stackoverflow.com/a/4387118/699224 – DNA

相关问题