Cela ressemble à une question stupide, mais tout ce que j'ai trouvé sur Internet était une ordure. Je ne peux tout simplement pas ajouter d'élément de type T
dans une liste List[T]
. J'ai essayé avec myList ::= myElement
mais il semble que cela crée un objet étrange et l'accès à myList.last
renvoie toujours le premier élément placé dans la liste.
List(1,2,3) :+ 4
Results in List[Int] = List(1, 2, 3, 4)
Notez que cette opération a une complexité de O (n). Si vous avez souvent besoin de cette opération ou pour de longues listes, envisagez d'utiliser un autre type de données (par exemple, un ListBuffer).
C'est parce que vous ne devriez pas le faire (au moins avec une liste immuable). Si vous avez vraiment besoin d'ajouter un élément à la fin d'une structure de données et que cette structure de données doit vraiment être une liste et que cette liste doit vraiment être immuable, faites ceci:
(4 :: List(1,2,3).reverse).reverse
ou ça:
List(1,2,3) ::: List(4)
Les listes dans Scala ne sont pas conçues pour être modifiées. En fait, vous ne pouvez pas ajouter d'éléments à un Scala List
; c'est une structure de données immuable, comme une chaîne Java. Ce que vous faites réellement lorsque vous "ajoutez un élément à une liste" dans Scala consiste à créer une nouvelle liste à partir d'une liste existante. (Source)
Au lieu d'utiliser des listes pour de tels cas d'utilisation, je suggère d'utiliser un ArrayBuffer
ou un ListBuffer
. Ces infrastructures de données sont conçues pour ajouter de nouveaux éléments.
Enfin, une fois que toutes vos opérations sont terminées, le tampon peut être converti en une liste. Voir l'exemple REPL suivant:
scala> import scala.collection.mutable.ListBuffer
import scala.collection.mutable.ListBuffer
scala> var fruits = new ListBuffer[String]()
fruits: scala.collection.mutable.ListBuffer[String] = ListBuffer()
scala> fruits += "Apple"
res0: scala.collection.mutable.ListBuffer[String] = ListBuffer(Apple)
scala> fruits += "Banana"
res1: scala.collection.mutable.ListBuffer[String] = ListBuffer(Apple, Banana)
scala> fruits += "Orange"
res2: scala.collection.mutable.ListBuffer[String] = ListBuffer(Apple, Banana, Orange)
scala> val fruitsList = fruits.toList
fruitsList: List[String] = List(Apple, Banana, Orange)
Ceci est similaire à l'une des réponses mais de manière différente:
scala> val x=List(1,2,3)
x: List[Int] = List(1, 2, 3)
scala> val y=x:::4::Nil
y: List[Int] = List(1, 2, 3, 4)
Nous pouvons ajouter ou ajouter deux listes ou une liste et un tableau
Append:
var l = List(1,2,3)
l=l:+4
Result : 1 2 3 4
var ar = Array(4,5,6)
for(x<-ar)
{ l=l:+x}
l.foreach(println)
Result:1 2 3 4 5 6
en attente:
var l = List[Int]()
for(x<-ar)
{ l=x::l } //prepending
l.foreach(println)
Result:6 5 4 1 2 3