这听起来像个愚蠢的问题,但我在互联网上找到的只是垃圾.我根本无法将类型的元素添加T
到列表中List[T]
.我试过myList ::= myElement
但似乎它创建了一个奇怪的对象并且访问myList.last
总是返回放在列表中的第一个元素.
Lan*_*dei 372
List(1,2,3) :+ 4
Results in List[Int] = List(1, 2, 3, 4)
Run Code Online (Sandbox Code Playgroud)
注意,该操作具有O(n)的复杂度.如果您经常需要此操作,或者对于长列表,请考虑使用其他数据类型(例如ListBuffer).
agi*_*eel 65
那是因为你不应该这样做(至少有一个不可变的列表).如果你真的需要在数据结构的末尾添加一个元素,并且这个数据结构确实需要是一个列表,而且这个列表确实必须是不可变的,那么请执行以下操作:
(4 :: List(1,2,3).reverse).reverse
Run Code Online (Sandbox Code Playgroud)
或者那个:
List(1,2,3) ::: List(4)
Run Code Online (Sandbox Code Playgroud)
Mar*_*ger 24
Scala中的列表不是为了修改而设计的.实际上,您无法向Scala添加元素List
; 它是一个不可变的数据结构,就像Java String一样.在Scala中"向列表中添加元素"时实际执行的操作是从现有列表创建新列表.(资源)
我建议使用a ArrayBuffer
或a 来代替使用这些用例的列表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)
Run Code Online (Sandbox Code Playgroud)
这类似于其中一个答案,但方式不同:
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)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
191425 次 |
最近记录: |