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

Scala 使用特定元素更新列表[List[Int]],scala,Scala,我有以下两项: 1) grid:List[List[Int]表示一个充满数字的表格 2) x:List[(Int,Int,Int)]其中前两个Int是行和列坐标,最后一个是特定位置必须更新的内容 基本上,我需要使用列表x中的以下项目更新网格,而不使用循环或变量 这是我到现在为止到达的地方,但它不起作用 def changeItem(x:(Int,Int,Int)) ={ grid.apply(x._1).updated(x._2, x._3) } z.map(x => ch

我有以下两项:

1)
grid:List[List[Int]
表示一个充满数字的表格

2)
x:List[(Int,Int,Int)]
其中前两个Int是行和列坐标,最后一个是特定位置必须更新的内容

基本上,我需要使用列表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)]
我走对了吗


提前感谢问题是您不能使用
map
来做这件事,因为
map
会根据
x
中的内容更改
grid
,这可能会返回一个修改后的
grid
列表,每个列表都有一个更改。相反,您希望
x
中的每个内容都修改整个
网格
,以保持此修改的
网格
,并在更新的网格上执行下一次更改,依此类推。
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))

因此,update语句要求将
grid
i
th元素替换为
grid(i)
的更新版本(因为我们必须在修改后将相同的列表放回原处)如果将
j
th元素替换为
v

很酷,我不知道你可以用FoldLeft来完成。我会尝试一下,非常感谢你的快速回复!:)或者如果你想更新网格,只需使用foreach。还有一个来自数独解算器作业的问题吗?看看作业会很有趣