在Scala中将映射[String,String]转换为映射[String,Int]

在Scala中将映射[String,String]转换为映射[String,Int],scala,map,Scala,Map,我有一个映射,其中键是字符串,值是Int,但表示为字符串 scala> val m = Map( "a" -> "1", "b" -> "2", "c" -> "3" ) m: scala.collection.immutable.Map[String,String] = Map(a -> 1, b -> 2, c -> 3) 现在我想将其转换为Map[String,Int],如Brian的回答所示,mapValues是最好的方法 scala>

我有一个映射,其中键是字符串,值是Int,但表示为字符串

scala> val m = Map( "a" -> "1", "b" -> "2", "c" -> "3" ) 
m: scala.collection.immutable.Map[String,String] = Map(a -> 1, b -> 2, c -> 3)

现在我想将其转换为
Map[String,Int]

,如Brian的回答所示,
mapValues
是最好的方法

scala> m.mapValues(_.toInt)
res0: scala.collection.immutable.Map[String,Int] = Map(a -> 1, b -> 2, c -> 3)
使用模式匹配可以实现相同的效果,如下所示:

m.map{ case (k, v) => (k, v.toInt)}
并且在其他情况下也很有用(例如,如果您也想更改密钥)

请记住,您是针对
映射
中的每个条目进行模式匹配,以tuple2表示,而不是针对整个
映射


您还必须在
case
语句周围使用大括号
{}
,以使编译器满意。

大括号不是强制性的,但在风格上更好。在这种特殊情况下(没有双关语),它们是必需的。用圆括号替换它们会产生:
错误:简单表达式的开头非法
。另请参见:与Scala中的大多数集合转换不同,
mapValues
是惰性的-每次引用map值时都应用转换函数。