我不能将T类型的元素添加到列表list [T]中。 我尝试myList::= myElement,但它似乎创建了一个奇怪的对象,并访问myList。Last总是返回放入列表中的第一个元素。我该如何解决这个问题呢?
当前回答
List在Scala中是不可变的
你可以使用MutableList
var l = scala.collection.mutable.MutableList(1,2,3)
l += 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
这是因为您不应该这样做(至少对于不可变列表)。 如果你真的需要在一个数据结构的末尾附加一个元素,而这个数据结构真的真的需要是一个列表,这个列表真的真的必须是不可变的,那么可以这样做:
(4 :: List(1,2,3).reverse).reverse
或者:
List(1,2,3) ::: List(4)
这与其中一个答案相似,但方式不同:
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)
Scala中的列表不是为修改而设计的。事实上,你不能在Scala List中添加元素;它是一个不可变的数据结构,就像Java字符串一样。 当您在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)
推荐文章
- 如何读一个文本文件到一个列表或数组与Python
- 如何在Python中将十六进制字符串转换为字节?
- 与push()相反;
- 用“+”(数组联合运算符)合并两个数组如何工作?
- 使arrayList.toArray()返回更具体的类型
- 如何从对象数组中通过对象属性找到条目?
- 如何从关联数组中删除键及其值?
- Akka Kill vs Stop vs Poison Pill?
- .Net数据结构:ArrayList, List, HashTable, Dictionary, SortedList, SortedDictionary—速度,内存,以及何时使用每个?
- 在$.ajax()中将数组传递给ajax请求
- 如何开始与Akka流?
- Java整数到字节数组
- 数组添加 vs +=
- 将查询字符串解析为数组
- 如何从PHP数组中删除重复的值