我有一个地图,其中键是一个字符串,我需要在使用此地图之前将每个键更改为小写。
我如何在Scala中执行此操作?我想的是:
var newMap = scala.collection.mutable.Map[String, String]()
data.foreach(d => newMap +=(d._1.toLowerCase -> d._2))
最佳方法是什么?提前谢谢。
答案 0 :(得分:8)
这里的问题是你正在尝试将低位密钥添加到可变Map
,这只是将额外的密钥堆积到其中。最好在这里使用严格的map
,而不是副作用函数。
val data = scala.collection.mutable.Map[String, String]("A" -> "1", "Bb" -> "aaa")
val newData = data.map { case (key, value) => key.toLowerCase -> value }
如果真的希望以可变的方式执行此操作,那么您必须删除旧密钥。
data.foreach { case (key, value) =>
data -= key
data += key.toLowerCase -> value
}
scala> data
res79: scala.collection.mutable.Map[String,String] = Map(bb -> aaa, a -> 1)
答案 1 :(得分:3)
您的方法可行,但一般在Scala中进行此类转换时,首选集合的不可变变体。
您可以使用map
类的Map
方法,并使用以下一行:
val m = Map("a"->"A", "B"->"b1", "b"->"B2", "C"->"c")
m.map(e=>(e._1.toLowerCase,e._2))