斯卡拉地图转换
问题描述:
我是一个新手斯卡拉恐怕: 我想一个地图转换成基于一些简单的逻辑新地图:斯卡拉地图转换
val postVals = Map("test" -> "testing1", "test2" -> "testing2", "test3" -> "testing3")
我想测试值“ testing1" 并更改值(在创建新地图)
def modMap(postVals: Map[String, String]): Map[String, String] = {
postVals foreach {case(k, v) => if(v=="testing1") postVals.update(k, "new value")}
}
答
您可以使用‘映射’的方法。
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))
答
替代阿尔扬的回答是::(只是略有变化)
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)
+0
很好,我正在尝试类似这样的东西,但无法获得正确的语法..谢谢 – Vonn 2010-05-24 06:04:06
+0
@Benjamin,T这里有一个小小的错误(在我和Arjan的答案中)。现在纠正了它。 – missingfaktor 2010-05-25 04:26:52
答
更容易:
val myMap = Map("a" -> "apple", "b" -> "banana")
myMap map {
case (k, "apple") => (k, "apfel")
case pair => pair
}
是,通过施加给定函数的所有元素,则返回一个新的集合非常感谢......我试图让我的大脑思考功能,慢慢地但肯定地...... – Vonn 2010-05-24 05:54:57