使用特定元素更新List [List [Int]]

时间:2013-12-08 15:44:26

标签: scala

我有这两个项目:

1)grid:List[List[Int]代表一个满数字的表

2)x:List[(Int,Int, Int)]其中前两个Ints是行和列坐标,最后一个是必须更新的具体位置。

基本上,我需要使用列表x中的以下项更新网格,而不使用循环或变量。

这是我到现在为止所处的地方,但它不起作用。

def changeItem(x:(Int,Int,Int)) ={
        grid.apply(x._1).updated(x._2, x._3)
}
z.map(x => changeItem(x)) //z contains the list[(Int,Int,Int)]

我是在正确的轨道上吗?

提前致谢

1 个答案:

答案 0 :(得分:3)

问题是,由于map根据map中的内容更改了grid,因此您无法使用x执行此操作,这可能会返回一个列表修改后的grid,每个都有一个更改。相反,您希望x中的每件事都修改整个grid,保留此修改后的grid,并对更新后的网格执行下一次更改,依此类推。 map方法无法执行此操作,但foldLeft可以,因为它会将每个操作的结果转发到下一个操作。

val grid = List(List(1,2,3),List(4,5,6),List(7,8,9))
val x = List((2,0,11),(1,2,12),(0,0,13))
x.foldLeft(grid) { case (z, (i,j,v)) => z.updated(i,grid(i).updated(j,v)) }
// List[List[Int]] = List(List(13, 2, 3), List(4, 5, 12), List(11, 8, 9))

因此更新语句说要用grid的更新版本替换i的{​​{1}}元素(因为我们必须在修改后将相同的列表放回原位)其中grid(i)元素替换为j