Добавление элемента в конец списка в Scala

Это звучит как глупый вопрос, но все, что я нашел в интернете, было мусором. Я просто не могу добавить элемент типа T в список List[T]. Я попытался с myList ::= myElement, но, похоже, он создает странный объект, и доступ к myList.last всегда возвращает первый элемент, который был помещен в список.

Ответ 1

List(1,2,3) :+ 4

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

Обратите внимание, что эта операция имеет сложность O (n). Если вам нужна эта операция часто или для длинных списков, подумайте об использовании другого типа данных (например, ListBuffer).

Ответ 2

Это потому, что вы не должны этого делать (по крайней мере, с неизменным списком). Если вам действительно нужно добавить элемент в конец структуры данных, и эта структура данных действительно действительно должна быть списком, и этот список действительно действительно должен быть неизменным, а затем выполните следующее:

(4 :: List(1,2,3).reverse).reverse

или что:

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

Ответ 3

Списки в Scala не предназначены для модификации. На самом деле вы не можете добавлять элементы в Scala List; это неизменяемая структура данных, как Java String. То, что вы на самом деле делаете, когда вы добавляете элемент в список в Scala, - это создать новый список из существующего списка. (Источник)

Вместо использования списков для таких вариантов использования я предлагаю либо использовать ArrayBuffer, либо ListBuffer. Эти структуры данных предназначены для добавления новых элементов.

Наконец, после выполнения всех операций буфер затем может быть преобразован в список. См. Следующий пример REPL:

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)

Ответ 4

Мы можем добавить или добавить два списка или список & массив
Добавить:

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

Предоплата:

var l = List[Int]()  
   for(x<-ar)  
    { l=x::l } //prepending    
     l.foreach(println)   

Result:6 5 4 1 2 3

Ответ 5

Это похоже на один из ответов, но по-разному:

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)