Antwort

42

Wenn Sie unveränderliche Karten verwenden, können Sie die - Methode verwenden eine erstellen neue Karte ohne den angegebenen Schlüssel:

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) 

Wenn Sie veränderbare Karten verwenden, können Sie nur einen Schlüssel mit entweder -= oder remove entfernen.

+0

Sie haben keine Muster zu verwenden, passend hier, denn wenn es keinen Schlüssel ist, die Sie Entfernen von bestehenden Map gibt es die gleiche Map. Keine Fehler. –

6

Das hängt vom Typ der von Ihnen verwendeten Scala.collection-Map ab. Scala kommt mit mutable und immutable Karten. Prüft diese Links:

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

und

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

In beiden Arten von Karten, - in der Regel der Betrieb ist ein Schlüssel zu entfernen. Die Details hängen vom Typ der Karte ab. Eine Karte mutable kann mit -= an Ort und Stelle geändert werden. So etwas wie

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

Auf der anderen Seite, eine unveränderliche Karte kann nicht an Ort und Stelle verändert werden und hat eine neue Karte zurückzukehren, nachdem ein Element zu entfernen.

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

Beachten Sie, dass Sie eine neue unveränderliche Karte erstellen.

17

Wenn Sie suchen, diese zu skalieren und mehrere Mitglieder zu entfernen, dann filterKeys ist die beste Wahl:

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

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

Sehr elegante und einfache Lösung, danke – SparkleGoat