Was ist der Unterschied zwischen :: und ::: in Scala

81
val list1 = List(1,2)
val list2 = List(3,4)

dann

list1::list2 returns:

List[Any] = List(List(1, 2), 3, 4)

list1:::list2 returns:

List[Int] = List(1, 2, 3, 4)

Ich habe gesehen, dass das Buch schreibt, dass es bei Verwendung ::auch zu Ergebnissen führt List[Int] = List(1, 2, 3, 4). Meine Scala-Version ist 2.9.

Hesey
quelle

Antworten:

115

::stellt ein einzelnes Element :::voran, während eine vollständige Liste vorangestellt wird. Wenn Sie also ein Listdavor setzen ::, wird dies als ein Element betrachtet, was zu einer verschachtelten Struktur führt.

Debilski
quelle
Gibt es aus Leistungsgründen einen Unterschied zwischen ::und :::?
null
2
Leistung sollte O(n)mit nwobei die Anzahl der Elemente zu prepend.
Debilski
Korrigieren Sie mich, wenn ich falsch liege, aber ist diese Operation nicht eher ein Anhängen als ein Voranstellen?
Janac Meena
Ein Beispiel würde es viel einfacher machen zu verstehen
Techkuz
15

Allgemein:

  • :: - fügt ein Element am Anfang einer Liste hinzu und gibt eine Liste mit dem hinzugefügten Element zurück
  • ::: - Verkettet zwei Listen und gibt die verkettete Liste zurück

Beispielsweise:

1 :: List(2, 3)             will return     List(1, 2, 3)
List(1, 2) ::: List(3, 4)   will return     List(1, 2, 3, 4)

In Ihrer spezifischen Frage führt die Verwendung ::zu einer Liste in einer Liste ( verschachtelte Liste ). Ich glaube, Sie bevorzugen die Verwendung :::.

Referenz: Klassenliste auf der offiziellen Website

RefaelJan
quelle