【发布时间】:2017-05-26 06:47:50
【问题描述】:
我有几个不可变的地图记录,例如:
val map = Map("number"->7,"name"->"Jane","city"->"New York")
我需要为每条记录识别"name"键并检查其值。如果值为"Jane",我需要替换为"Doe"并更新地图记录。
【问题讨论】:
标签: scala maps immutable-collections
我有几个不可变的地图记录,例如:
val map = Map("number"->7,"name"->"Jane","city"->"New York")
我需要为每条记录识别"name"键并检查其值。如果值为"Jane",我需要替换为"Doe"并更新地图记录。
【问题讨论】:
标签: scala maps immutable-collections
这可以通过简单的映射操作和模式匹配来实现。
scala> val dictionary = Map("number"->7,"name"->"Jane","city"->"New York")
map: scala.collection.immutable.Map[String,Any] = Map(number -> 7, name -> Jane, city -> New York)
scala> dictionary map {
| case ("name","Jane") => "name" -> "Doe"
| case x => x
| }
res3: scala.collection.immutable.Map[String,Any] = Map(number -> 7, name -> Doe, city -> New York)
【讨论】:
一个简单的if else 逻辑就可以解决问题
map.map(k => {
if(k._1.toString.equalsIgnoreCase("name") && k._2.toString.equalsIgnoreCase("jane"))
(k._1, "Doe")
else
k
})
或者一个简单的match case 应该可以解决问题,正如@rogue-one 所解释的那样
map.map(k => (k._1.toString, k._2.toString) match{
case ("name", "Jane") => k._1 -> "Doe"
case _ => k
})
谢谢
【讨论】: