Scala映射转换

Scala映射转换,scala,map,Scala,Map,恐怕我是Scala的新手: 我正试图根据一些简单的逻辑将地图转换为新地图: val postVals = Map("test" -> "testing1", "test2" -> "testing2", "test3" -> "testing3") 我想测试值“testing1”并更改该值(创建新映射时) 您可以使用“映射”方法。将给定函数应用于新集合的所有元素,从而返回新集合: scala> def modMap(postVals: Map[String, String]

恐怕我是Scala的新手: 我正试图根据一些简单的逻辑将地图转换为新地图:

val postVals = Map("test" -> "testing1", "test2" -> "testing2", "test3" -> "testing3")
我想测试值“testing1”并更改该值(创建新映射时)


您可以使用“映射”方法。将给定函数应用于新集合的所有元素,从而返回新集合:


scala> def modMap(postVals: Map[String, String]): Map[String, String] = {
   postVals map {case(k, v) => if(v == "a") (k -> "other value") else (k ->v)}
}

scala> val m = Map[String, String]("1" -> "a", "2" -> "b")
m: scala.collection.immutable.Map[String,String] = Map((1,a), (2,b))

scala> modMap(m)
res1: Map[String,String] = Map((1,other value), (2,b))


阿扬回答的替代方案:(只是一个小小的改变)

更简单的是:

val myMap = Map("a" -> "apple", "b" -> "banana") 

myMap map {
   case (k, "apple") => (k, "apfel")
   case pair => pair
}

非常感谢。。。我正试着让我的大脑功能性地思考。缓慢但肯定……啊,很好。我试过类似的东西,但语法不正确。谢谢。@Benjamin,我和Arjan的答案中都有一个小错误。现在更正它。
scala> val someMap = Map("a" -> "apple", "b" -> "banana")
someMap: scala.collection.immutable.Map[java.lang.String,java.lang.String] = Map(a -> apple, b -> banana)

scala> val newMap = someMap map {                                     
     |   case(k , v @ "apple") => (k, "alligator")            
     |   case pair             => pair            
     | }
newMap: scala.collection.immutable.Map[java.lang.String,java.lang.String] = Map(a -> alligator, b -> banana)
val myMap = Map("a" -> "apple", "b" -> "banana") 

myMap map {
   case (k, "apple") => (k, "apfel")
   case pair => pair
}