it-swarm.com.ru

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

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

197
Masiar
List(1,2,3) :+ 4

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

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

357
Landei

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

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

или это:

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

Списки в Scala не предназначены для изменения. Фактически, вы не можете добавлять элементы в Scala List ; это неизменяемая структура данных , как строка Java. Что вы действительно делаете, когда "добавляете элемент в список" в 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)
18
Markus Weninger

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

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)
2
Venkat

Мы можем добавить или добавить два списка или список и массив
[. .____] 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

Предварение:

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

Result:6 5 4 1 2 3
1
Ramesh Muthavarapu