¿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.

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.


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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.