Scala Set (Sammlung)
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
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
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
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
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
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
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
Andere Erweiterungen
Scala Collections