Scala—在数组中初始化值的最优雅的方式';已经申报了吗?

Scala—在数组中初始化值的最优雅的方式';已经申报了吗?,scala,Scala,我有一个3d数组,定义如下: val 3dArray = new Array[Array[Array[Int]]](512, 8, 8) 在Javascript中,我将执行以下操作将每个元素分配给1: for (i = 0; i < 512; i++) { 3dArray[i] = []; for (j = 0; j < 8; j++) { 3dArray[i][j] = []; for (k = 0; k < 8;

我有一个3d数组,定义如下:

val 3dArray = new Array[Array[Array[Int]]](512, 8, 8)
在Javascript中,我将执行以下操作将每个元素分配给1:

for (i = 0; i < 512; i++)
 {
    3dArray[i] = [];
    for (j = 0; j < 8; j++)
    {
        3dArray[i][j] = [];
        for (k = 0; k < 8; k++)
        {
            3dArray[i][j][k] = 1;
        }
    }
}
(i=0;i<512;i++)的

{
3dArray[i]=[];
对于(j=0;j<8;j++)
{
3dArray[i][j]=[];
对于(k=0;k<8;k++)
{
3dArray[i][j][k]=1;
}
}
}

做同样的事情最优雅的方法是什么?

不确定是否有特别优雅的方法,但这里有一种方法(我使用后缀
s
表示维度,即
xss
是一个二维数组)

val xsss=Array.ofDim[Int](512,8,8)
用于(xss
for){
我见:

使用Array.fill将1到5维的数组初始化为某个给定值,使用Array.tablate在给定当前索引的情况下初始化1到5维的数组:

scala> Array.fill(2,1,1)(42)
res1: Array[Array[Array[Int]]] = Array(Array(Array(42)), Array(Array(42)))
enter code here

scala> Array.tabulate(3,2,1){ (x,y,z) => x+y+z }
res2: Array[Array[Array[Int]]] = Array(Array(Array(0), Array(1)), Array(Array(1), Array(2)), Array(Array(2), Array(3)))

不管它值多少钱,
3dArray
都不是一个有效的标识符。是的,但它说明了我希望的要点。第二种方法是我认为我可以做的,但只是不知道如何做。谢谢!使用Scala 2.13.3,我得到:
警告:trait SeqOps中的方法转换不推荐(自2.13.0起)。对“IndexedSeq”改用“mapInPlace”
。用
mapInPlace
替换
transform
,以避免警告。您声明了新数组,但最初的问题是“…初始化数组中已声明的值?”
for (xss <- xsss; xs <- xss)
  xs transform (_ => 1)
for {
    i <- a.indices
    j <- a(i).indices
    k <- a(i)(j).indices
} a(i)(j)(k) = 1
for {
    e  <- a
    ee <- e
    i  <- ee.indices
} ee(i) = 1
scala> Array.fill(2,1,1)(42)
res1: Array[Array[Array[Int]]] = Array(Array(Array(42)), Array(Array(42)))
enter code here

scala> Array.tabulate(3,2,1){ (x,y,z) => x+y+z }
res2: Array[Array[Array[Int]]] = Array(Array(Array(0), Array(1)), Array(Array(1), Array(2)), Array(Array(2), Array(3)))