web-dev-qa-db-ja.com

scalaでマップからキー値を削除する方法

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

プライバシーが0の場合、このマップからデータを削除する方法。

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

不変のマップを使用する場合、-メソッドは、指定されたキーなしで新しいマップを作成します。

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

58
Leo

これをスケールアップして複数のメンバーを削除する場合は、filterKeysが最善の策です。

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

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

それは、使用しているScala.collectionマップのタイプによって異なります。 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"
}

新しい不変マップを作成していることに注意してください。

9
Sudeep Juvekar
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)
0
RAGHHURAAMM