Scala Set (Sammlung)

Scala 集合Scala Collections

Scala Set ist eine Sammlung von Objekten ohne Duplikate; alle Elemente sind eindeutig.

Scala-Sammlungen werden in veränderliche und unveränderliche Sammlungen unterteilt.

Standardmäßig verwendet Scala unveränderliche Sammlungen. Wenn Sie veränderliche Sammlungen verwenden möchten, müssen Sie auf das Paketscala.collection.mutable.Setverweisen.

Standardmäßig wird scala.collection.immutable.Set referenziert. Ein Beispiel für eine unveränderliche Sammlung ist wie folgt:

Beispiel

val set = Set(1,2,3)
println(set.getClass.getName) //

println(set.exists(_ % 2 == 0)) //true
println(set.drop(1)) //Set(2,3)

Wenn Sie veränderliche Sammlungen verwenden müssen, müssen Sie scala.collection.mutable.Set importieren:

Beispiel

import scala.collection.mutable.Set // Eine veränderliche Sammlung kann überall importiert werden

val mutableSet = Set(1,2,3)
println(mutableSet.getClass.getName) // scala.collection.mutable.HashSet

mutableSet.add(4)
mutableSet.remove(1)
mutableSet += 5
mutableSet -= 2

println(mutableSet) // Set(5, 3, 4)

val another = mutableSet.toSet
println(another.getClass.getName) // scala.collection.immutable.Set

Hinweis:Obwohl sowohl mutable Set als auch immutable Set Operationen zum Hinzufügen oder Löschen von Elementen besitzen, gibt es einen sehr großen Unterschied. Das Arbeiten mit einem immutable Set erzeugt ein neues Set, und das ursprüngliche Set bleibt unverändert, genau wie bei List. Das Arbeiten mit einem mutable Set hingegen verändert das Set selbst, ähnlich wie bei ListBuffer.


Grundlegende Operationen mit Set

Scala-Collections haben drei grundlegende Operationen:

  • headGibt das erste Element der Collection zurück
  • tailGibt eine Collection zurück, die alle Elemente außer dem ersten enthält
  • isEmptyGibt true zurück, wenn die Collection leer ist

Jede Operation auf Scala-Collections kann mit diesen drei grundlegenden Operationen ausgedrückt werden. Beispiel:

Beispiel

object Test {
   def main(args: Array[String]) {
      val site = Set("Example", "Google", "Baidu")
      val nums: Set[Int] = Set()

      println( "Die erste Website ist: " + site.head )
      println( "Die letzte Website ist: " + site.tail )
      println( "Prüfe, ob die Liste site leer ist: " + site.isEmpty )
      println( "Prüfe, ob nums leer ist: " + nums.isEmpty )
   }
}

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

$ vim Test.scala 
$ scala Test.scala 
第一网站是 : Example
最后一个网站是 : Set(Google, Baidu)
查看列表 site 是否为空 : false
查看 nums 是否为空 : true

Mengen verketten

Du kannst++Operator oderSet.++()Methode verwenden, um zwei Mengen zu verketten. Wenn doppelte Elemente vorhanden sind, werden sie entfernt. Beispiel:

Beispiel

object Test {
   def main(args: Array[String]) {
      val site1 = Set("Example", "Google", "Baidu")
      val site2 = Set("Faceboook", "Taobao")

      // ++ als Operator verwendet
      var site = site1 ++ site2
      println( "site1 ++ site2 : " + site )

      // ++ als Methode verwendet
      site = site1.++(site2)
      println( "site1.++(site2) : " + site )
   }
}

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

$ vim Test.scala 
$ scala Test.scala 
site1 ++ site2 : Set(Faceboook, Taobao, Google, Baidu, Example)
site1.++(site2) : Set(Faceboook, Taobao, Google, Baidu, Example)

Größte und kleinste Elemente in einer Menge finden

Sie können die MethodeSet.minverwenden, um das kleinste Element in der Menge zu finden, oder die MethodeSet.maxverwenden, um das größte Element in der Menge zu finden. Beispiel:

Beispiel

object Test {
   def main(args: Array[String]) {
      val num = Set(5,6,9,20,30,45)

      // Größte und kleinste Elemente in der Menge finden
      println( "Das kleinste Element in Set(5,6,9,20,30,45) ist : " + num.min )
      println( "Das größte Element in Set(5,6,9,20,30,45) ist : " + num.max )
   }
}

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

$ vim Test.scala 
$ scala Test.scala 
Set(5,6,9,20,30,45) 集合中的最小元素是 : 5
Set(5,6,9,20,30,45) 集合中的最大元素是 : 45

Schnittmenge

Sie können die MethodeSet.&oder die MethodeSet.intersectverwenden, um die Schnittmengenelemente der beiden Mengen anzuzeigen. Beispiel:

Beispiel

object Test {
   def main(args: Array[String]) {
      val num1 = Set(5,6,9,20,30,45)
      val num2 = Set(50,60,9,20,35,55)

      // Schnittmenge
      println( "num1.&(num2) : " + num1.&(num2) )
      println( "num1.intersect(num2) : " + num1.intersect(num2) )
   }
}

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

$ vim Test.scala 
$ scala Test.scala 
num1.&(num2) : Set(20, 9)
num1.intersect(num2) : Set(20, 9)

Häufig verwendete Methoden von Scala Set

Die folgende Tabelle listet die häufig verwendeten Methoden von Scala Set auf:

Nein. Methode und Beschreibung
1

def +(elem: A): Set[A]

Fügt dem Set ein neues Element x hinzu und erstellt ein neues Set, es sei denn, das Element ist bereits vorhanden

2

def -(elem: A): Set[A]

Entfernt Elemente aus dem Set und erstellt ein neues Set

3

def contains(elem: A): Boolean

Gibt true zurück, wenn das Element im Set vorhanden ist, andernfalls false.

4

def &(that: Set[A]): Set[A]

Gibt die Schnittmenge zweier Sets zurück

5

def &~(that: Set[A]): Set[A]

Gibt die Differenz zweier Mengen zurück

6

def +(elem1: A, elem2: A, elems: A*): Set[A]

Erstellt eine neue unveränderliche Sammlung, indem Elemente aus der angegebenen Sammlung hinzugefügt werden

7

def ++(elems: A): Set[A]

Führt zwei Sammlungen zusammen

8

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

Erstellt eine neue unveränderliche Sammlung, indem Elemente entfernt werden, die in der angegebenen Sammlung enthalten sind

9

def addString(b: StringBuilder): StringBuilder

Fügt alle Elemente der unveränderlichen Sammlung einem String-Puffer hinzu

10

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

Fügt alle Elemente der unveränderlichen Sammlung einem String-Puffer hinzu und verwendet dabei das angegebene Trennzeichen

11

def apply(elem: A)

Prüft, ob die Sammlung das angegebene Element enthält

12

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

Zählt die Anzahl der Sammlungselemente, die eine angegebene Bedingung erfüllen

13

def copyToArray(xs: Array[A], start: Int, len: Int): Unit

Kopiert Elemente der unveränderlichen Collection in ein Array

14

def diff(that: Set[A]): Set[A]

Vergleicht die Differenz zweier Sets

15

def drop(n: Int): Set[A]]

Gibt eine neue Collection zurück, bei der die ersten n Elemente verworfen wurden

16

def dropRight(n: Int): Set[A]

Gibt eine neue Collection zurück, bei der die letzten n Elemente verworfen wurden

17

def dropWhile(p: (A) => Boolean): Set[A]

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

18

def equals(that: Any): Boolean

Die equals-Methode kann für jede Sequenz verwendet werden. Sie wird verwendet, um zu vergleichen, ob Sequenzen gleich sind.

19

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

Bestimmt, ob ein Element, das die angegebene Bedingung erfüllt, in der unveränderlichen Collection existiert.

20

def filter(p: (A) => Boolean): Set[A]

Gibt alle Elemente der unveränderlichen Collection aus, die die angegebene Bedingung erfüllen.

21

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

Findet das erste Element in der unveränderlichen Sammlung, das die angegebene Bedingung erfüllt

22

def forall(p: (A) => Boolean): Boolean

Ermittelt, ob die angegebene Bedingung für alle Elemente dieser Sammlung gilt

23

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

Wendet eine Funktion auf alle Elemente der unveränderlichen Sammlung an

24

def head: A

Ruft das erste Element der unveränderlichen Sammlung ab

25

def init: Set[A]

Gibt alle Elemente außer dem letzten zurück

26

def intersect(that: Set[A]): Set[A]

Berechnet die Schnittmenge zweier Mengen

27

def isEmpty: Boolean

Ermittelt, ob die Sammlung leer ist

28

def iterator: Iterator[A]

Erstellt einen neuen Iterator, um über die Elemente zu iterieren

29

def last: A

Gibt das letzte Element zurück

30

def map[B](f: (A) => B): immutable.Set[B]

Berechnet alle Elemente mit der angegebenen Methode neu

31

def max: A

Findet das größte Element

32

def min: A

Findet das kleinste Element

33

def mkString: String

Zeigt alle Elemente der Sammlung als Zeichenkette an

34

def mkString(sep: String): String

Zeigt alle Elemente der Sammlung als Zeichenkette unter Verwendung eines Trennzeichens an

35

def product: A

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

36

def size: Int

Gibt die Anzahl der Elemente in der unveränderlichen Sammlung zurück

37

def splitAt(n: Int): (Set[A], Set[A])

Teilt die unveränderliche Sammlung in zwei Container: Der erste besteht aus den ersten n Elementen, und der zweite besteht aus den verbleibenden Elementen

38

def subsetOf(that: Set[A]): Boolean

Gibt true zurück, wenn die Menge eine Teilmenge enthält, andernfalls false

39

def sum: A

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

40

def tail: Set[A]

Gibt die Elemente einer unveränderlichen Sammlung außer dem ersten Element zurück

41

def take(n: Int): Set[A]

Gibt die ersten n Elemente zurück

42

def takeRight(n: Int):Set[A]

Gibt die letzten n Elemente zurück

43

def toArray: Array[A]

Konvertiert die Sammlung in ein Array

44

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

Gibt einen Puffer zurück, der alle Elemente der unveränderlichen Sammlung enthält

45

def toList: List[A]

Gibt eine List zurück, die alle Elemente der unveränderlichen Sammlung enthält

46

def toMap[T, U]: Map[T, U]

Gibt eine Map zurück, die alle Elemente der unveränderlichen Sammlung enthält

47

def toSeq: Seq[A]

Gibt eine Seq zurück, die alle Elemente der unveränderlichen Sammlung enthält

48

def toString(): String

Gibt eine String-Darstellung des Objekts zurück

Weitere Methoden finden Sie inder API-Dokumentation

Scala 集合Scala Collections

Andere Erweiterungen