我无法将类型为
T
的元素添加到列表List[T]
中。
我尝试使用myList ::= myElement
,但它似乎创建了一个奇怪的对象,并且访问myList.last
总是返回放入列表中的第一个元素。我该如何解决这个问题?List(1,2,3) :+ 4
Results in List[Int] = List(1, 2, 3, 4)
请注意,此操作的时间复杂度为O(n)。如果您需要频繁执行此操作或者处理长列表,请考虑使用另一种数据类型(例如ListBuffer)。
这是因为你不应该这样做(至少对于一个不可变的列表而言)。 如果你真的非常需要在一个数据结构的末尾添加元素,而且这个数据结构真的需要是一个列表,并且这个列表一定要是不可变的,那么你可以采用以下方法:
(4 :: List(1,2,3).reverse).reverse
或者是这样的:List(1,2,3) ::: List(4)
:+
只需要重建一次。 - Nicolas PayetteScala中的列表不是设计用来修改的。实际上,您无法向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)
这与其中一个答案相似,但是方式不同:
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)
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中List是不可变的
你可以使用MutableList
var l = scala.collection.mutable.MutableList(1,2,3)
l += 4