Добавление элемента в конец списка в Scala - PullRequest
198 голосов
/ 17 октября 2011

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

Ответы [ 5 ]

358 голосов
/ 17 октября 2011
List(1,2,3) :+ 4

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

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

64 голосов
/ 17 октября 2011

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

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

или что:

List(1,2,3) ::: List(4)
20 голосов
/ 13 марта 2017

Списки в 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)
2 голосов
/ 13 ноября 2017

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

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)
1 голос
/ 08 июня 2017

Мы можем добавить или добавить два списка или список и массив
Приложение:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...