如何将Map中的键转换为小写?

时间:2015-03-31 13:34:14

标签: scala dictionary collections

我有一个地图,其中键是一个字符串,我需要在使用此地图之前将每个键更改为小写。

我如何在Scala中执行此操作?我想的是:

var newMap = scala.collection.mutable.Map[String, String]()
data.foreach(d => newMap +=(d._1.toLowerCase -> d._2))   

最佳方法是什么?提前谢谢。

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))