Scala List
Scala-Listen ähneln Arrays darin, dass alle Elemente denselben Typ haben, unterscheiden sich aber auch: Listen sind unveränderlich, was bedeutet, dass ein einmal definierter Wert nicht geändert werden kann, und Listen haben eine rekursive Struktur (d. h. eine verkettete Listenstruktur), während Arrays dies nicht haben.
Der Elementtyp T einer Liste kann als List[T] geschrieben werden. Zum Beispiel listet das Folgende verschiedene Arten von Listen auf:
Beispiel
val site: List[String] = List("Example", "Google", "Baidu")
// Ganzzahlenliste
val nums: List[Int] = List(1, 2, 3, 4)
// Leere Liste
val empty: List[Nothing] = List()
// Zweidimensionale Liste
val dim: List[List[Int]] =
Liste(
Liste(1, 0, 0),
Liste(0, 1, 0),
Liste(0, 0, 1)
)
Die beiden Grundeinheiten zum Aufbau einer Liste sind Nil und ::Nilund::
NilEs kann auch als leere Liste dargestellt werden.
Das obige Beispiel kann wie folgt geschrieben werden:
Beispiel
val site = "Example" :: ("Google" :: ("Baidu" :: Nil))
// Ganzzahlenliste
val nums = 1 :: (2 :: (3 :: (4 :: Nil)))
// Leere Liste
val empty = Nil
// Zweidimensionale Liste
val dim = (1 :: (0 :: (0 :: Nil))) ::
(0 :: (1 :: (0 :: Nil))) ::
(0 :: (0 :: (1 :: Nil))) :: Nil
Grundlegende Listenoperationen
Scala-Listen haben drei grundlegende Operationen:
-
headGibt das erste Element der Liste zurück -
tailGibt eine Liste zurück, die alle Elemente außer dem ersten enthält -
isEmptyGibt true zurück, wenn die Liste leer ist
Jede Operation auf Scala-Listen kann mit diesen drei grundlegenden Operationen ausgedrückt werden. Beispiele sind wie folgt:
Beispiel
object Test {
def main(args: Array[String]) {
val site = "Example" :: ("Google" :: ("Baidu" :: Nil))
val nums = Nil
println( "Die erste Website ist: " + site.head )
println( "Die letzte Website ist: " + site.tail )
println( "Prüfen, ob die Liste site leer ist: " + site.isEmpty )
println( "Prüfen, ob nums leer ist: " + nums.isEmpty )
}
}
Das Ausführen des obigen Codes erzeugt die folgende Ausgabe:
$ vim Test.scala $ scala Test.scala 第一网站是 : Example 最后一个网站是 : List(Google, Baidu) 查看列表 site 是否为空 : false 查看 nums 是否为空 : true
Verkettung von Listen
Sie können den:::::: Operator oder dieList.:::()List.:::() Methode oder dieList.concat()concat-Methode verwenden, um zwei oder mehr Listen zu verketten. Beispiele sind wie folgt:
Beispiel
def main(args: Array[String]) {
val site1 = "Example" :: ("Google" :: ("Baidu" :: Nil))
val site2 = "Facebook" :: ("Taobao" :: Nil)
// Verwendung des :::-Operators
var fruit = site1 ::: site2
println( "site1 ::: site2 : " + fruit )
// Verwendung der List.:::()-Methode
fruit = site1.:::(site2)
println( "site1.:::(site2) : " + fruit )
// Verwendung der concat-Methode
fruit = List.concat(site1, site2)
println( "List.concat(site1, site2) : " + fruit )
}
}
Das Ausführen des obigen Codes erzeugt die folgende Ausgabe:
$ vim Test.scala $ scala Test.scala site1 ::: site2 : List(Example, Google, Baidu, Facebook, Taobao) site1.:::(site2) : List(Facebook, Taobao, Example, Google, Baidu) List.concat(site1, site2) : List(Example, Google, Baidu, Facebook, Taobao)
List.fill()
Wir können die List.fill()-Methode verwenden, um eine Liste mit einer bestimmten Anzahl wiederholter Elemente zu erstellen:
Beispiel
def main(args: Array[String]) {
val site = List.fill(3)("Beispiel") // Beispiel 3-mal wiederholen
println( "site : " + site )
val num = List.fill(10)(2) // Element 2 10-mal wiederholen
println( "num : " + num )
}
}
Das Ausführen des obigen Codes erzeugt die folgende Ausgabe:
$ vim Test.scala $ scala Test.scala site : List(Example, Example, Example) num : List(2, 2, 2, 2, 2, 2, 2, 2, 2, 2)
List.tabulate()
Die Methode List.tabulate() erstellt eine Liste mithilfe einer gegebenen Funktion.
Der erste Parameter der Methode ist die Anzahl der Elemente, die zweidimensional sein kann; der zweite Parameter ist die angegebene Funktion. Wir berechnen das Ergebnis mithilfe der angegebenen Funktion und fügen den zurückgegebenen Wert in die Liste ein, beginnend bei 0. Beispiele sind wie folgt:Beispiel
def main(args: Array[String]) {
// 5 Elemente mit der angegebenen Funktion erstellen
val squares = List.tabulate(6)(n => n * n)
println( "Eindimensional: " + squares )
// Eine zweidimensionale Liste erstellen
val mul = List.tabulate( 4,5 )( _ * _ )
println( "Mehrdimensional: " + mul )
}
}
Das Ausführen des obigen Codes erzeugt die folgende Ausgabe:
$ vim Test.scala $ scala Test.scala 一维 : List(0, 1, 4, 9, 16, 25) 多维 : List(List(0, 0, 0, 0, 0), List(0, 1, 2, 3, 4), List(0, 2, 4, 6, 8), List(0, 3, 6, 9, 12))
List.reverse
List.reverse wird verwendet, um die Reihenfolge einer Liste umzukehren. Beispiele sind wie folgt:
Beispiel
def main(args: Array[String]) {
val site = "Example" :: ("Google" :: ("Baidu" :: Nil))
println( "Vor der Umkehrung von site: " + site )
println( "Nach der Umkehrung von site: " + site.reverse )
}
}
Das Ausführen des obigen Codes erzeugt die folgende Ausgabe:
$ vim Test.scala $ scala Test.scala site 反转前 : List(Example, Google, Baidu) site 反转后 : List(Baidu, Google, Example)
Häufige Methoden für Scala List
Die folgende Tabelle listet häufige Methoden für Scala List auf:
| Nein. | Methode und Beschreibung |
|---|---|
| 1 |
def +:(elem: A): List[A] Fügt ein Element am Anfang der Liste hinzu scala> val x = List(1) x: List[Int] = List(1) scala> val y = 2 +: x y: List[Int] = List(2, 1) scala> println(x) List(1) |
| 2 |
def ::(x: A): List[A] Fügt ein Element am Anfang der Liste hinzu |
| 3 |
def :::(prefix: List[A]): List[A] Fügt Elemente der angegebenen Liste am Anfang der Liste hinzu |
| 4 |
def :+(elem: A): List[A] Kopiert die Liste nach dem Hinzufügen von Elementen scala> val a = List(1) a: List[Int] = List(1) scala> val b = a :+ 2 b: List[Int] = List(1, 2) scala> println(a) List(1) |
| 5 |
def addString(b: StringBuilder): StringBuilder Fügt alle Elemente der Liste einem StringBuilder hinzu |
| 6 |
def addString(b: StringBuilder, sep: String): StringBuilder Fügt alle Elemente der Liste einem StringBuilder mit einem angegebenen Trennzeichen hinzu |
| 7 |
def apply(n: Int): A Ruft ein Element anhand des Listenindex ab |
| 8 |
def contains(elem: Any): Boolean Prüft, ob die Liste das angegebene Element enthält |
| 9 |
def copyToArray(xs: Array[A], start: Int, len: Int): Unit Kopiert die Elemente der Liste in ein Array |
| 10 |
def distinct: List[A] Entfernt doppelte Elemente aus der Liste und gibt eine neue Liste zurück |
| 11 |
def drop(n: Int): List[A] Verwirft die ersten n Elemente und gibt eine neue Liste zurück |
| 12 |
def dropRight(n: Int): List[A] Verwirft die letzten n Elemente und gibt eine neue Liste zurück |
| 13 |
def dropWhile(p: (A) => Boolean): List[A] Verwirft Elemente von links nach rechts, bis die Bedingung p nicht mehr erfüllt ist |
| 14 |
def endsWith[B](that: Seq[B]): Boolean Prüft, ob die Liste mit der angegebenen Sequenz endet |
| 15 |
def equals(that: Any): Boolean Bestimmt, ob sie gleich sind |
| 16 |
def exists(p: (A) => Boolean): Boolean Prüft, ob ein Element, das die angegebene Bedingung erfüllt, in der Liste existiert Prüft, ob die Liste l ein bestimmtes Element enthält scala> l.exists(s => s == "Hah") res7: Boolean = true |
| 17 |
def filter(p: (A) => Boolean): List[A] Gibt alle Elemente aus, die die angegebene Bedingung erfüllen Filtert Elemente mit Länge 3 heraus scala> l.filter(s => s.length == 3) res8: List[String] = List(Hah, WOW) |
| 18 |
def forall(p: (A) => Boolean): Boolean Überprüft alle Elemente Zum Beispiel: überprüft, ob alle Elemente mit "H" beginnen scala> l.forall(s => s.startsWith("H")) res10: Boolean = false |
| 19 |
def foreach(f: (A) => Unit): Unit Wendet eine Funktion auf alle Elemente der Liste an |
| 20 |
def head: A Ruft das erste Element der Liste ab |
| 21 |
def indexOf(elem: A, from: Int): Int Findet die Position des ersten Vorkommens eines Elements ab der angegebenen Position 'from' |
| 22 |
def init: List[A] Gibt alle Elemente außer dem letzten zurück |
| 23 |
def intersect(that: Seq[A]): List[A] Berechnet die Schnittmenge mehrerer Sammlungen |
| 24 |
def isEmpty: Boolean Prüft, ob die Liste leer ist |
| 25 |
def iterator: Iterator[A] Erstellt einen neuen Iterator, um über die Elemente zu iterieren |
| 26 |
def last: A Gibt das letzte Element zurück |
| 27 |
def lastIndexOf(elem: A, end: Int): Int Findet die Position des letzten Vorkommens eines Elements beginnend bei der angegebenen Position 'end' |
| 28 |
def length: Int Gibt die Länge der Liste zurück |
| 29 |
def map[B](f: (A) => B): List[B] Berechnet alle Elemente mit der angegebenen Methode neu |
| 30 |
def max: A Findet das größte Element |
| 31 |
def min: A Findet das kleinste Element |
| 32 |
def mkString: String Gibt alle Elemente der Liste als Zeichenkette aus |
| 33 |
def mkString(sep: String): String Gibt alle Elemente der Liste unter Verwendung eines Trennzeichens als Zeichenkette aus |
| 34 |
def reverse: List[A] Kehrt die Liste um |
| 35 |
def sorted[B >: A]: List[A] Sortiert die Liste |
| 36 |
def startsWith[B](that: Seq[B], offset: Int): Boolean Prüft, ob die Liste die angegebene Sequenz an der angegebenen Position enthält |
| 37 |
def sum: A Berechnet die Summe der Elemente der Sammlung |
| 38 |
def tail: List[A] Gibt alle Elemente außer dem ersten zurück |
| 39 |
def take(n: Int): List[A] Extrahiert die ersten n Elemente der Liste |
| 40 |
def takeRight(n: Int): List[A] Extrahiert die letzten n Elemente der Liste |
| 41 |
def toArray: Array[A] Konvertiert die Liste in ein Array |
| 42 |
def toBuffer[B >: A]: Buffer[B] Gibt einen Puffer zurück, der alle Elemente der Liste enthält |
| 43 |
def toMap[T, U]: Map[T, U] Konvertiert List in Map |
| 44 |
def toSeq: Seq[A] Konvertiert List in Seq |
| 45 |
def toSet[B >: A]: Set[B] Konvertiert List in Set |
| 46 |
def toString(): String Konvertiert die Liste in einen String |
Weitere Methoden finden Sie in derAPI-Dokumentation
Andere Erweiterungen
Scala Collections