如何在scala中访问和存储二维列表值?

如何在scala中访问和存储二维列表值?,scala,list,arraylist,Scala,List,Arraylist,在Scala编程语言中,如何存储二维列表的值 var lists = List[List[Double]] 如何以如下方式为其赋值 lists(0)(1) = 0.4 当我尝试这种方式时,它说 value update is not a member of List[Double] 这里出了什么问题,如何纠正? 谢谢你正如我在评论中所说,你不能像你尝试的那样访问列表的第n个元素,但它将与数组一起工作: scala> val a = Array[Array[Double]](Array

在Scala编程语言中,如何存储二维列表的值

var lists = List[List[Double]]
如何以如下方式为其赋值

lists(0)(1) = 0.4
当我尝试这种方式时,它说

value update is not a member of List[Double]
这里出了什么问题,如何纠正?
谢谢你

正如我在评论中所说,你不能像你尝试的那样访问列表的第n个元素,但它将与数组一起工作:

scala> val a = Array[Array[Double]](Array(1.2))
a: Array[Array[Double]] = Array(Array(1.2))

scala> a(0)(0) = 1.1

scala> a
res16: Array[Array[Double]] = Array(Array(1.1))
如果要使用可变列表,请使用如下所示的
ListBuffer

scala> val l = ListBuffer[ListBuffer[Double]](ListBuffer(1.1))
l: scala.collection.mutable.ListBuffer[scala.collection.mutable.ListBuffer[Double]] = ListBuffer(ListBuffer(1.1))

scala> l(0)(0) = 10.2

scala> l
res21: scala.collection.mutable.ListBuffer[scala.collection.mutable.ListBuffer[Double]] = ListBuffer(ListBuffer(10.2))

如果要更新列表,请使用
updated
方法,该方法返回一个更新了单个元素的新列表

val updatedLists = lists.updated(0, lists(0).updated(1, 0.4))
这看起来很难看,也是个坏主意。您应该重新考虑数据结构的选择<代码>列表不是一个好的选择,如果这是您想要做的。如果您发现自己需要这样做,或者使用列表来处理除
头部
尾部
之外的任何事情,那么您可能不想要
列表
向量
通常是比
列表
更好的默认集合,但这不是这个问题的主题)。基于索引的读取(尤其是更新)对于列表来说非常慢,更新可能需要大量的对象复制。这不是列表的目的,它们不是为它而设计的


根据您正在尝试的操作,您几乎肯定需要一个
Array
ArrayBuffer
,就像alifirat所说的那样。数组是可变的,对于随机读取和更新非常有效。如果要进行更新,则需要可变结构。如果您绝对必须有一个不可变的结构,您可以使用
Vector
,它允许高效的随机读取。随机更新可能比列表更新更好,但它仍然不是你想经常做的事情

List
是不可变的,
Array
是可变的,所以只要用
Array
更改您的类型
List
。有没有办法使用List而不是Array?在scala集合中,如果您想使用List,您有一个名为
MutableLists
的类型。好吧,但是在阅读了关于可变列表和不可变列表的内容之后,我想说,在我的情况下,它是不可变的。因为我只需要以一种便于访问的方式读取和存储数据。这些数据不会被改变。。有什么建议吗@阿里菲拉特