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

pla*_*oom 8 collections dictionary scala

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

我怎么能在Scala中做到这一点?我想的是:

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

它的最佳方法是什么?提前致谢.

Mic*_*jac 8

这里的问题是你正在尝试将低位的密钥添加到mutable中Map,这只是将额外的密钥堆积到其中.最好在map这里使用严格,而不是副作用函数.

val data = scala.collection.mutable.Map[String, String]("A" -> "1", "Bb" -> "aaa")
val newData = data.map { case (key, value) => key.toLowerCase -> value }
Run Code Online (Sandbox Code Playgroud)

如果你真的想以可变的方式做到这一点,那么你必须删除旧密钥.

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)
Run Code Online (Sandbox Code Playgroud)

  • 在你展示时以可变的方式做它有点狡猾,因为你正在迭代时修改地图.实际上,这意味着foreach的主体可以执行多次(您可以通过添加日志轻松验证它).在这种特殊情况下,这不会影响结果,因为转换为小写是幂等的,但对于任何非幂等操作而言,这并不是一个好习惯. (2认同)