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.

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.


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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.