如何从scala中的map中删除键值

时间:2014-02-22 14:20:00

标签: scala dictionary collections playframework scala-collections

Map(data -> "sumi", rel -> 2, privacy -> 0, status -> 1,name->"govind singh")

如果隐私为0,如何从此地图中删除数据。

Map(rel -> 2, privacy -> 0, status -> 1,name->"govind singh")  

4 个答案:

答案 0 :(得分:57)

如果您使用不可变地图,则可以使用-方法创建没有给定密钥的新地图:

val mx = Map("data" -> "sumi", "rel" -> 2, "privacy" -> 0)

val m = mx("privacy") match {
    case 0 => mx - "data"
    case _ => mx
}

=> m: scala.collection.immutable.Map[String,Any] = Map(rel -> 2, privacy -> 0)

如果您使用可变地图,则只需删除包含-=remove的密钥。

答案 1 :(得分:23)

如果您想扩大规模并删除多个成员,那么filterKeys是您最好的选择:

val a = Map(
  "data"    -> "sumi",
  "rel"     -> "2",
  "privacy" -> "0",
  "status"  -> "1",
  "name"    -> "govind singh"
)

val b = a.filterKeys(_ != "data")

答案 2 :(得分:8)

这取决于您使用的Scala.collection Map的类型。 Scala包含mutableimmutable地图。检查这些链接:

http://www.scala-lang.org/api/2.10.2/index.html#scala.collection.immutable.Map

http://www.scala-lang.org/api/2.10.2/index.html#scala.collection.mutable.Map

在这两种类型的地图中,-通常是删除密钥的操作。细节取决于地图的类型。可以使用mutable修改-=地图。像

这样的东西
if (m.contains("privacy") && m.getOrElse("privacy", 1) == 0) {
    m -= "play"
}

另一方面,不能在适当的位置修改不可变地图,并且必须在删除元素后返回新地图。

if (m.contains("privacy") && m.getOrElse("privacy", 1) == 0) {
    val newM = m - "play"
}

请注意,您正在创建一个新的不可变映射。

答案 3 :(得分:0)

val m = Map("data" -> "sumi", "rel" -> 2, "privacy" -> 0,"status" -> 1,"name"->"govind singh")
scala> if(m("privacy")==0) m.filterKeys(_ != "data")
res63: Any = Map(name -> govind singh, rel -> 2, privacy -> 0, status -> 1)