Scala Map

Scala 集合Scala Collections

Eine Map ist eine iterierbare Schlüssel/Wert-Struktur.

Alle Werte können über Schlüssel abgerufen werden.

Schlüssel in einer Map sind eindeutig.

Eine Map wird auch als Hash-Tabelle bezeichnet.

Map hat zwei Typen: veränderlich und unveränderlich. Der Unterschied besteht darin, dass veränderliche Objekte geändert werden können, während unveränderliche Objekte nicht.

Standardmäßig verwendet Scala unveränderliche Map. Wenn Sie eine veränderliche Collection verwenden müssen, müssen Sie explizit die Klasseimport scala.collection.mutable.Mapimportieren.

In Scala können Sie sowohl veränderliche als auch unveränderliche Maps verwenden. Für unveränderliche verwenden Sie Map direkt; für veränderliche verwenden Sie mutable.Map. Das folgende Beispiel demonstriert die Anwendung einer unveränderlichen Map:

// 空哈希表,键为字符串,值为整型
var A:Map[Char,Int] = Map()

// Map 键值对演示
val colors = Map("red" -> "#FF0000", "azure" -> "#F0FFFF")

Beim Definieren einer Map müssen Sie Typen für Schlüssel-Wert-Paare definieren. Wenn Sie Schlüssel-Wert-Paare hinzufügen möchten, können Sie das +-Zeichen verwenden, wie unten gezeigt:

A += ('I' -> 1)
A += ('J' -> 5)
A += ('K' -> 10)
A += ('L' -> 100)

Grundlegende Map-Operationen

Scala Map hat drei grundlegende Operationen:

Methode Beschreibung
keys Gibt alle Schlüssel der Map zurück
values Gibt alle Werte der Map zurück
isEmpty Gibt true zurück, wenn die Map leer ist

Beispiel

Das folgende Beispiel demonstriert die grundlegende Anwendung der oben genannten drei Methoden:

Beispiel

object Test {
   def main(args: Array[String]) {
      val colors = Map("red" -> "#FF0000",
                       "azure" -> "#F0FFFF",
                       "peru" -> "#CD853F")

      val nums: Map[Int, Int] = Map()

      println( "Die Schlüssel in colors sind: " + colors.keys )
      println( "Die Werte in colors sind: " + colors.values )
      println( "Prüfen, ob colors leer ist: " + colors.isEmpty )
      println( "Prüfen, ob nums leer ist: " + nums.isEmpty )
   }
}

Das Ausführen des obigen Codes erzeugt die folgende Ausgabe:

$ scalac Test.scala 
$ scala Test
colors 中的键为 : Set(red, azure, peru)
colors 中的值为 : MapLike(#FF0000, #F0FFFF, #CD853F)
检测 colors 是否为空 : false
检测 nums 是否为空 : true

Map-Zusammenführung

Sie können den++Operator oder dieMap.++()-Methode verwenden, um zwei Maps zu verketten. Wenn Maps zusammengeführt werden, werden doppelte Schlüssel entfernt. Das Folgende zeigt ein Beispiel für das Zusammenführen von zwei Maps:

Beispiel

object Test {
   def main(args: Array[String]) {
      val colors1 = Map("red" -> "#FF0000",
                        "azure" -> "#F0FFFF",
                        "peru" -> "#CD853F")
      val colors2 = Map("blue" -> "#0033FF",
                        "yellow" -> "#FFFF00",
                        "red" -> "#FF0000")

      // ++ als Operator
      var colors = colors1 ++ colors2
      println( "colors1 ++ colors2 : " + colors )

      // ++ als Methode
      colors = colors1.++(colors2)
      println( "colors1.++(colors2) : " + colors )

   }
}

Das Ausführen des obigen Codes erzeugt die folgende Ausgabe:

$ scalac Test.scala 
$ scala Test
colors1 ++ colors2 : Map(blue -> #0033FF, azure -> #F0FFFF, peru -> #CD853F, yellow -> #FFFF00, red -> #FF0000)
colors1.++(colors2) : Map(blue -> #0033FF, azure -> #F0FFFF, peru -> #CD853F, yellow -> #FFFF00, red -> #FF0000)

Ausgabe der Schlüssel und Werte einer Map

Das Folgende verwendet eine foreach-Schleife, um die Schlüssel und Werte in einer Map auszugeben:

Beispiel

object Test {
   def main(args: Array[String]) {
      val sites = Map("example" -> "http://www.example.com",
                       "baidu" -> "http://www.baidu.com",
                       "taobao" -> "http://www.taobao.com")

      sites.keys.foreach{ i =>  
                           print( "Schlüssel = " + i )
                           println(" Wert = " + sites(i) )}
   }
}

Das Ausführen des obigen Codes erzeugt die folgende Ausgabe:

$ scalac Test.scala 
$ scala Test
Key = example Value = http://www.example.com
Key = baidu Value = http://www.baidu.com
Key = taobao Value = http://www.taobao.com

Prüfen, ob eine Map einen angegebenen Schlüssel enthält

Sie können die MethodeMap.containsverwenden, um zu prüfen, ob ein angegebener Schlüssel in einer Map existiert. Beispiel:

Beispiel

object Test {
   def main(args: Array[String]) {
      val sites = Map("example" -> "http://www.example.com",
                       "baidu" -> "http://www.baidu.com",
                       "taobao" -> "http://www.taobao.com")

      if( sites.contains( "example" )){
           println("Der Schlüssel example existiert, der zugehörige Wert ist:"  + sites("example"))
      }else{
           println("Der Schlüssel example existiert nicht")
      }
      if( sites.contains( "baidu" )){
           println("Der Schlüssel baidu existiert, der zugehörige Wert ist:"  + sites("baidu"))
      }else{
           println("Der Schlüssel baidu existiert nicht")
      }
      if( sites.contains( "google" )){
           println("Der Schlüssel google existiert, der zugehörige Wert ist:"  + sites("google"))
      }else{
           println("Der Schlüssel google existiert nicht")
      }
   }
}

Das Ausführen des obigen Codes erzeugt die folgende Ausgabe:

$ scalac Test.scala 
$ scala Test
example 键存在,对应的值为 :http://www.example.com
baidu 键存在,对应的值为 :http://www.baidu.com
google 键不存在

Scala Map Methoden

Die folgende Tabelle listet gängige Methoden von Scala Map auf:

Nein. Methode und Beschreibung
1

def ++(xs: Map[(A, B)]): Map[A, B]

Gibt eine neue Map zurück, die aus der neuen Map xs besteht

2

def -(elem1: A, elem2: A, elems: A*): Map[A, B]

Gibt eine neue Map zurück, wobei die Schlüssel elem1, elem2 oder andere elems entfernt werden.

3

def --(xs: GTO[A]): Map[A, B]

Gibt eine neue Map zurück, wobei die entsprechenden Schlüssel im xs-Objekt entfernt werden.

4

def get(key: A): Option[B]

Gibt den Wert für den angegebenen Schlüssel zurück

5

def iterator: Iterator[(A, B)]

Erstellt einen neuen Iterator und gibt Schlüssel/Wert-Paare aus

6

def addString(b: StringBuilder): StringBuilder

Hängt alle Elemente der Map an einen StringBuilder an, mit einem optionalen Trennzeichen

7

def addString(b: StringBuilder, sep: String): StringBuilder

Hängt alle Elemente der Map an einen StringBuilder an, mit einem optionalen Trennzeichen

8

def apply(key: A): B

Gibt den Wert für den angegebenen Schlüssel zurück oder die default-Methode der Map, wenn er nicht existiert

9

def clear(): Unit

Leert die Map

10

def clone(): Map[A, B]

Kopiert von einer Map in eine andere Map

11

def contains(key: A): Boolean

Gibt true zurück, wenn der angegebene Schlüssel in der Map existiert, andernfalls false.

12

def copyToArray(xs: Array[(A, B)]): Unit

Kopiert die Collection in ein Array

13

def count(p: ((A, B)) => Boolean): Int

Zählt die Anzahl der Collection-Elemente, die die angegebene Bedingung erfüllen

14

def default(key: A): B

Definiert den Standardwert der Map, der zurückgegeben wird, wenn der Schlüssel nicht existiert.

15

def drop(n: Int): Map[A, B]

Gibt eine neue Sammlung zurück, nachdem die ersten n Elemente verworfen wurden

16

def dropRight(n: Int): Map[A, B]

Gibt eine neue Sammlung zurück, nachdem die letzten n Elemente verworfen wurden

17

def dropWhile(p: ((A, B)) => Boolean): Map[A, B]

Verwirft Elemente von links nach rechts, bis die Bedingung p falsch ist

18

def empty: Map[A, B]

Gibt eine leere Map desselben Typs zurück

19

def equals(that: Any): Boolean

Gibt true zurück, wenn zwei Maps gleich sind (sowohl Schlüssel als auch Wert gleich), andernfalls false

20

def exists(p: ((A, B)) => Boolean): Boolean

Bestimmt, ob ein Element, das die angegebene Bedingung erfüllt, in der Sammlung vorhanden ist

21

def filter(p: ((A, B))=> Boolean): Map[A, B]

Gibt alle Elemente zurück, die die angegebene Bedingung erfüllen

22

def filterKeys(p: (A) => Boolean): Map[A, B]

Gibt eine unveränderliche Map zurück, die die angegebene Bedingung erfüllt

23

def find(p: ((A, B)) => Boolean): Option[(A, B)]

Findet das erste Element in der Collection, das die angegebene Bedingung erfüllt

24

def foreach(f: ((A, B)) => Unit): Unit

Wendet eine Funktion auf alle Elemente der Collection an

25

def init: Map[A, B]

Gibt alle Elemente außer dem letzten zurück

26

def isEmpty: Boolean

Prüft, ob die Map leer ist

27

def keys: Iterable[A]

Gibt alle Schlüssel zurück

28

def last: (A, B)

Gibt das letzte Element zurück

29

def max: (A, B)

Findet das größte Element

30

def min: (A, B)

Findet das kleinste Element

31

def mkString: String

Zeigt alle Elemente der Sammlung als Zeichenkette an

32

def product: (A, B)

Gibt das Produkt der numerischen Elemente in der Sammlung zurück.

33

def remove(key: A): Option[B]

Entfernt den angegebenen Schlüssel

34

def retain(p: (A, B) => Boolean): Map.this.type

Gibt true zurück, wenn die Bedingung erfüllt ist

35

def size: Int

Gibt die Anzahl der Elemente in der Map zurück

36

def sum: (A, B)

Gibt die Summe aller numerischen Elemente in der Sammlung zurück

37

def tail: Map[A, B]

Gibt alle Elemente einer Sammlung außer dem ersten Element zurück

38

def take(n: Int): Map[A, B]

Gibt die ersten n Elemente zurück

39

def takeRight(n: Int): Map[A, B]

Gibt die letzten n Elemente zurück

40

def takeWhile(p: ((A, B)) => Boolean): Map[A, B]

Gibt Elemente zurück, die die angegebene Bedingung erfüllen

41

def toArray: Array[(A, B)]

Konvertiert eine Sammlung in ein Array

42

def toBuffer[B >: A]: Buffer[B]

Gibt einen Puffer zurück, der alle Elemente der Map enthält

43

def toList: List[A]

Gibt eine List zurück, die alle Elemente der Map enthält

44

def toSeq: Seq[A]

Gibt eine Seq zurück, die alle Elemente der Map enthält

45

def toSet: Set[A]

Gibt ein Set zurück, das alle Elemente der Map enthält

46

def toString(): String

Gibt ein String-Objekt zurück

Weitere Methoden finden Sie in derAPI-Dokumentation

Scala 集合Scala Collections

Weitere Erweiterungen