我不能将T类型的元素添加到列表list [T]中。 我尝试myList::= myElement,但它似乎创建了一个奇怪的对象,并访问myList。Last总是返回放入列表中的第一个元素。我该如何解决这个问题呢?


当前回答

这是因为您不应该这样做(至少对于不可变列表)。 如果你真的需要在一个数据结构的末尾附加一个元素,而这个数据结构真的真的需要是一个列表,这个列表真的真的必须是不可变的,那么可以这样做:

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

或者:

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

其他回答

我们可以将两个list或list&array附加或前置 附加:

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

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

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 :: List(1,2,3).reverse).reverse

或者:

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

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

注意,这个操作的复杂度为O(n)。如果你经常需要这个操作,或者对于很长的列表,考虑使用另一种数据类型(例如ListBuffer)。

List在Scala中是不可变的

你可以使用MutableList

var l = scala.collection.mutable.MutableList(1,2,3)
l += 4