我想使用不可变的索引多维数组。有意义的结构是Vector
的{{1}}。
Vector
只需指定尺寸就可以创建一个空数组,就像使用scala> val v = Vector[Vector[Int]](Vector[Int](1,2,3), Vector[Int](4,5,6), Vector[Int](7,8,9))
v: scala.collection.immutable.Vector[Vector[Int]] = Vector(Vector(1, 2, 3), Vector(4, 5, 6), Vector(7, 8, 9))
一样。
Array.ofDim
但是,没有scala> a = Array.ofDim[Int](3,3)
a: Array[Array[Int]] = Array(Array(0, 0, 0), Array(0, 0, 0), Array(0, 0, 0))
,函数,我找不到等价物。
对于不可变对象,是否有等效的Vector.ofDim
?如果没有,为什么不呢?
答案 0 :(得分:20)
答案 1 :(得分:14)
有一种名为tabulate
的创建方法,可让您根据索引设置内容:
scala> Vector.tabulate(3,3){ (i,j) => 3*i+j+1 }
res0: scala.collection.immutable.Vector[scala.collection.immutable.Vector[Int]] =
Vector(Vector(1, 2, 3), Vector(4, 5, 6), Vector(7, 8, 9))
如果您只需要零(或其他常量),则可以使用fill
代替:
scala> Vector.fill(3,3)(0)
res1: scala.collection.immutable.Vector[scala.collection.immutable.Vector[Int]] =
Vector(Vector(0, 0, 0), Vector(0, 0, 0), Vector(0, 0, 0))
答案 2 :(得分:5)
您可以使用fill
:
scala> Vector.fill( 3 )( Vector.fill(3)(0) )
res1: scala.collection.immutable.Vector[scala.collection.immutable.Vector[Int]] =
Vector(Vector(0, 0, 0), Vector(0, 0, 0), Vector(0, 0, 0))