97 votes

Quelle est la différence entre : : et :: : en Scala ?

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

puis

list1::list2 returns:

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

list1:::list2 returns:

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

J'ai vu que le livre écrit que lorsqu'on utilise :: il en résulte également List[Int] = List(1, 2, 3, 4) . Ma version de Scala est 2.9.

135voto

Debilski Points 28586

:: prépointe un seul élément alors que ::: Prépare une liste complète. Ainsi, si vous mettez un List devant :: il est considéré comme un seul élément, ce qui donne lieu à une structure imbriquée.

0 votes

Pour des raisons de performance, y a-t-il une différence entre :: y ::: ?

2 votes

Les performances doivent être O(n) con n étant le nombre d'éléments à ajouter au début.

0 votes

Corrigez-moi si je me trompe, mais cette opération n'est-elle pas un append plutôt qu'un prepend ?

33voto

rafraph Points 47

En général :

  • :: - ajoute un élément au début d'une liste et renvoie une liste avec l'élément ajouté
  • ::: - concatène deux listes et renvoie la liste concaténée

Par exemple :

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

Dans votre question spécifique, utiliser :: aura pour résultat une liste dans une liste ( liste imbriquée ), je pense donc que vous préférez utiliser ::: .

Référence : classe Liste sur le site officiel

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X