如何在scala中访问和存储两个维度列表值?

时间:2017-04-24 14:33:21

标签: scala list arraylist

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

var lists = List[List[Double]]

如何以

之类的方式为其指定值
lists(0)(1) = 0.4

当我尝试这种方式时,它会说

value update is not a member of List[Double]

这里出了什么问题,以及如何做到对不对? 谢谢

2 个答案:

答案 0 :(得分:2)

就像在我的评论中所说的那样,您无法像您尝试的那样访问列表的n-th元素,但它可以与Array一起使用:

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))

答案 1 :(得分:0)

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

val updatedLists = lists.updated(0, lists(0).updated(1, 0.4))

这看起来很丑陋,这也是一个坏主意。您应该重新考虑您选择的数据结构。 List如果你想做的话,不是一个好的选择。如果您发现自己需要执行此操作或将List用于headtail::以外的任何内容,则可能不需要List({{1}通常是比Vector更好的默认集合,但这不是这个问题的原因)。对于列表而言,基于索引的读取尤其是更新非常慢,并且更新可能需要大量对象复制。这不是列表的目的,它们不是为它而设计的。

根据您的目标,您几乎肯定希望ListArray喜欢alifirat说。对于随机读取和更新,数组是可变的非常有效。如果要进行更新,则需要可变结构。如果您绝对必须具有不可变结构,则可以使用ArrayBuffer来实现有效的随机读取。随机更新可能比Vector更好,但它仍然不是您想要经常做的事情。