Answers:
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)
:+
效率低下的列表可能仅重建一次。
Scala中的列表并非旨在进行修改。实际上,您不能将元素添加到Scala中List
;它是一个不变的数据结构,例如Java String。当您在Scala中“将元素添加到列表”时,实际要做的是从现有List创建一个新List。(资源)
建议不要使用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)
我们可以添加或添加两个列表,也可以添加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
List
转换为ListBuffer
,将元素追加,然后ListBuffer
转换回(String
与StringBuilder
Java中非常相似),但这只是一个猜测。