2017-05-26 50 views
0

的条件替换值的关键,我有几个不可变的映射记录,如:如何在地图基础上阶

val map = Map("number"->7,"name"->"Jane","city"->"New York") 

我需要确定"name"键为每个记录,并检查其值。如果值是​​3210,我需要用"Doe"替换并更新地图记录。

+1

请参考api文档:http://www.scala-lang.org/api/current/scala/collection/Map.html – Pavel

回答

5

这可以通过简单的映射操作和模式匹配来实现。

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

谢谢你,它的工作。 – b1399877

+0

@ b1399877。大。感谢您的确认。您是否可以通过点击勾号接受发布的答案之一? –

0

一个简单if else逻辑应该做的伎俩

map.map(k => { 
    if(k._1.toString.equalsIgnoreCase("name") && k._2.toString.equalsIgnoreCase("jane")) 
    (k._1, "Doe") 
    else 
    k 
}) 

或简单match case应该做的伎俩以及由@流氓一个

map.map(k => (k._1.toString, k._2.toString) match{ 
    case ("name", "Jane") => k._1 -> "Doe" 
    case _ => k 
}) 

感谢解释