¿Cuál es la diferencia entre :: y ::: en Scala?

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

entonces

list1::list2 returns:

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

list1:::list2 returns:

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

Vi que el libro escribe que cuando se usa ::también resulta List[Int] = List(1, 2, 3, 4). Mi versión de Scala es 2.9.

Hesey
fuente

Respuestas:

117

::antepone un solo elemento mientras que :::antepone una lista completa. Por lo tanto, si coloca un Listdelante ::, se toma como un elemento, lo que da como resultado una estructura anidada.

Debilski
fuente
Por motivos de rendimiento, ¿hay alguna diferencia entre ::y :::?
nulo
2
Rendimiento debe ser O(n)con nser el número de elementos a anteponer.
Debilski
Corrígeme si me equivoco, pero ¿esta operación no es un anexo en lugar de un prefijo?
Janac Meena
un ejemplo lo haría mucho más fácil de entender
techkuz
19

En general:

  • :: - agrega un elemento al principio de una lista y devuelve una lista con el elemento agregado
  • ::: - concatena dos listas y devuelve la lista concatenada

Por ejemplo:

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

En su pregunta específica, el uso ::dará como resultado una lista en una lista ( lista anidada ), por lo que creo que prefiere usar :::.

Referencia: lista de clases en el sitio oficial

RefaelJan
fuente