将元素追加到Scala中列表的末尾

时间:2011-10-17 12:56:34

标签: arrays scala

这听起来像是一个愚蠢的问题,但我在互联网上找到的只是垃圾。 我根本无法将T类型的元素添加到列表List[T]中。 我尝试使用myList ::= myElement,但它似乎创建了一个奇怪的对象,并且访问myList.last总是返回放在列表中的第一个元素。

5 个答案:

答案 0 :(得分:357)

List(1,2,3) :+ 4

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

请注意,此操作的复杂度为O(n)。如果您经常需要此操作或长列表,请考虑使用其他数据类型(例如ListBuffer)。

答案 1 :(得分:64)

那是因为你不应该这样做(至少有一个不可变的列表)。 如果你真的需要在数据结构的末尾添加一个元素,并且这个数据结构确实需要是一个列表,而且这个列表确实必须是不可变的,那么请执行以下操作:

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

或那:

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

答案 2 :(得分:18)

Scala中的列表不是为了修改而设计的。实际上,您无法向Scala List添加元素;它是一个 不可变数据结构 ,就像Java String一样。 在Scala中“向列表添加元素”时实际执行的操作是从现有列表创建新列表。 (Source)

我建议您使用ArrayBufferListBuffer,而不是使用此类用例的列表。这些数据结构旨在添加新元素。

最后,在完成所有操作之后,可以将缓冲区转换为列表。请参阅以下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)

答案 3 :(得分:2)

这与其中一个答案类似,但方式不同:

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)

答案 4 :(得分:1)

我们可以追加或添加两个列表或列表&数组
附加:

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