Scala使用可变条目填充或制表

Scala使用可变条目填充或制表,scala,vector,mutable,Scala,Vector,Mutable,以下内容生成不可变向量的向量: var darr = Vector.tabulate(2, 3){ (a,b) => a*2+b } darr: scala.collection.immutable.Vector[scala.collection.immutable.Vector[Int]] = Vector(Vector(0, 1, 2), Vector(2, 3, 4)) 但是我们的用例需要的是可变向量的向量。如何做到这一点?只需对制表进行嵌套调用,其中内部调用位于可变序列上,如Bu

以下内容生成不可变向量的向量:

var darr = Vector.tabulate(2, 3){ (a,b) => a*2+b }
darr: scala.collection.immutable.Vector[scala.collection.immutable.Vector[Int]] = Vector(Vector(0, 1, 2), Vector(2, 3, 4))

但是我们的用例需要的是可变向量的向量。如何做到这一点?

只需对
制表进行嵌套调用,其中内部调用位于可变序列上,如
Buffer

import collection.mutable.Buffer
Vector.tabulate(2)(a => Buffer.tabulate(3)(b => a*2+b))
// Vector(ArrayBuffer(0, 1, 2), ArrayBuffer(2, 3, 4))
2D
tablate
实际上只是嵌套的
tablate
的语法糖:

// From GenTraversableFactory
def tabulate[A](n1: Int, n2: Int)(f: (Int, Int) => A): CC[CC[A]] =
  tabulate(n1)(i1 => tabulate(n2)(f(i1, _)))

如果您的集合保持不变,并且您所需要的只是可变的条目,那么我认为使用2D数组可能是一个很好的解决方案。另外,Scala中的
Array
对象提供了创建1D到5D数组的
制表方法。我所要做的就是将原始示例中的单词
Vector
更改为
Array
,这样效果很好:

scala> var darr = Array.tabulate(2, 3){ (a,b) => a*2+b }
darr: Array[Array[Int]] = Array(Array(0, 1, 2), Array(2, 3, 4))

谢谢,这就是我想要的。请考虑投票。确切的功能食谱,使用咖喱。