2

多次元配列のすべての値を変更したいのですが、「val への再割り当て」エラーが発生します。

スカラコード:

var cal = Array.ofDim[Double](300, 10000000);
cal.foreach(x => {
    x.foreach({o => o = 5.1} //here it'll be more complicated code 
)});

Array の値を再割り当てする方法を知っている人はいますか?

ありがとう

4

3 に答える 3

9

変更可能なシーケンスtransformに対するインプレース変更の一括操作があります。

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

次のこともできます。

for (y <- 0 until cal.length) {
  val row = cal(y)
  for (x <- 0 until row.length) {
    row(x) = 5.1
  }
}
于 2013-04-09T16:12:54.370 に答える
1

これが最善の方法かどうかはわかりませんが、うまくいきます:

  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 => o = 5.1です。

于 2013-04-09T16:07:26.453 に答える
1

あなたの使用以来、varあなたは簡単にできる

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

注意:これは慣用的なスカラでも機能的でもありませんが、機能します。

于 2013-04-10T07:07:05.113 に答える