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