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

Gov*_*ngh 42 collections dictionary scala playframework scala-collections

Map(data -> "sumi", rel -> 2, privacy -> 0, status -> 1,name->"govind singh")
Run Code Online (Sandbox Code Playgroud)

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

Map(rel -> 2, privacy -> 0, status -> 1,name->"govind singh")  
Run Code Online (Sandbox Code Playgroud)

Leo*_*Leo 59

如果使用不可变映射,则可以使用该-方法创建没有给定键的新映射:

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)
Run Code Online (Sandbox Code Playgroud)

如果您使用可变映射,则可以使用-=或删除密钥remove.


Kev*_*ght 24

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

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

val b = a.filterKeys(_ != "data")
Run Code Online (Sandbox Code Playgroud)


Sud*_*kar 10

这取决于您使用的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"
}
Run Code Online (Sandbox Code Playgroud)

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

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

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