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.