Scala 如何修改数组中的每个值?

Scala 如何修改数组中的每个值?,scala,Scala,我想更改多维数组中的所有值,但收到“重新分配到val”错误 Scala代码: var cal = Array.ofDim[Double](300, 10000000); cal.foreach(x => { x.foreach({o => o = 5.1} //here it'll be more complicated code )}); 有人知道如何重新分配数组中的值吗 谢谢我不确定这是否是最好的方法,但它确实有效: val cal = Array.ofDim[D

我想更改多维数组中的所有值,但收到“重新分配到val”错误

Scala代码:

var cal = Array.ofDim[Double](300, 10000000);
cal.foreach(x => {
    x.foreach({o => o = 5.1} //here it'll be more complicated code 
)});
有人知道如何重新分配数组中的值吗


谢谢

我不确定这是否是最好的方法,但它确实有效:

  val cal = Array.ofDim[Double](300, 10000000) 
  (0 until cal.length).foreach(rowIndex => {
     val row = cal(rowIndex)
     (0 until row.length).foreach(colIndex => {
        row(colIndex) = 5.1 //here it'll be more complicated code
     })
  })

出现错误的原因是,您试图在
o=>o=5.1
中为不可变函数参数
o
分配一个值,此时有一个就地修改批量操作处于启用状态

(y 5.1)的

}
您还可以执行以下操作:

for (y <- 0 until cal.length) {
  val row = cal(y)
  for (x <- 0 until row.length) {
    row(x) = 5.1
  }
}

for(y由于您使用了
var
您可以

var cal = Array.ofDim[Double](300, 10000000);
cal = cal.map{
  a=>a.map{
    o=> 1.5 \\complex calculations 
  }
}

NB:这不是惯用的scala,甚至不是函数式的,但它可以工作。

其中
n
cal
的大小,
m
是每行的大小,逗号是乘法?当然。谢谢,如果我需要使用transform数组的索引,我应该使用zipWithIndex.transform吗?不,这将创建一个新的数组元素对及其索引-
数组[(T,Int)]
。更糟糕的是,该中间数组随后将被更新。相反,您应该使用嵌套for循环来覆盖范围。
var cal = Array.ofDim[Double](300, 10000000);
cal = cal.map{
  a=>a.map{
    o=> 1.5 \\complex calculations 
  }
}