如何从scala中的地图中删除键值

Posted

技术标签:

【中文标题】如何从scala中的地图中删除键值【英文标题】:how to remove key value from map in scala 【发布时间】:2014-03-24 05:09:24 【问题描述】:
Map(data -> "sumi", rel -> 2, privacy -> 0, status -> 1,name->"govind singh")

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

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

【问题讨论】:

【参考方案1】:
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)

【讨论】:

【参考方案2】:

如果您希望扩大规模并移除多个成员,那么filterKeys 是您的最佳选择:

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

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

【讨论】:

这保留了对过滤收集的引用,不允许它被垃圾收集。 基于@St.Antario 的评论,filterKeys 导致地图无法序列化。因此,如果您正在过滤您计划用作 Spark Broadcast 的地图,则此方法将不起作用。在这些情况下,您最好使用以下内容:valuesToRemove.foldLeft(theMap) (filteredMap, valueToRemove) => filteredMap - valueToRemove 【参考方案3】:

这取决于您使用的 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"

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

【讨论】:

【参考方案4】:

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

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 删除一个键。

【讨论】:

您不必在这里使用模式匹配,因为如果您没有从现有 Map 中删除的键,它会返回相同的 Map。没有错误。

以上是关于如何从scala中的地图中删除键值的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Scala 中的映射键中获取值的常见元素?

如何从codeigniter中的foreach中删除键值?

Dart/Flutter - 如何删除 List 中 Map 元素的键值对?

[677]. 键值映射

[677]. 键值映射

Java标准库中的键值,键值类[重复]