在Scala中更新列表值

时间:2015-12-09 20:59:23

标签: list scala recursion

感谢阅读!我已经创建了一个递归的数独求解程序,其中(除其他外)调用一个函数“步骤”,它将元素添加到板上的所有位置,这些元素在该元素集的解决方案中只有一个可能的解决方案。这可以通过以下方式完成:

sudoku.grid.updated(row, sudoku.grid(row).updated(column, value))  

其中row,column和value是从上面的函数返回的元组,而sudoku是另一个类,grid是a:

val grid: List[List[Int]]

每行占用一个新List。当我打印上面的代码段时,我正确地得到一个更新的List,例如。

List(6, 0, 0, 4, 1, 0, 0, 9, 3)

变为

List(6, 0, 0, 4, 1, 8<<<Correctly Updated, 0, 9, 3)

根据需要,但是当通过简单地从第一个代码段中删除print()来打印整个网格时,值不会更新。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

scala.List是不可变的(好东西),你不能改变它的内容。 List.updated会返回一个 new 列表,其中的元素已按指定方式更改,这是您在打印代码返回的值时所看到的内容。但原始列表未被修改。

解决这个问题的方法是使用scala.collection.mutable.Seq代替List。这些是可变集合,您可以在其上调用seq.update(index, elem),这将改变实际底层集合的内容。

更好的是,只需要(或大部分)不可变对象来解决所需的问题。这是功能性的方式。