2013-04-02 155 views
16

这听起来很容易,但我不能正确理解。斯卡拉2维阵列

如何在Scala中创建尺寸为100乘60的2维数组? 假设我有一个名为Abcd的课程,我想创建一个Abcd的二维数组。 我尝试用下面的代码,但不起作用。

var myArray = new Array[Array[Abcd]](100,60) 

它抱怨“太多的论据构造阵列”

+0

的永久混乱:没有多维数组,只有数组(数组(阵列...))的数组。 –

+0

这在一些语言中可能是正确的,但从概念上讲它是错误的,语言应该遵循这个概念。 – Elazar

+0

语言应该符合算法表达的内容,而不是内存中的内容(人们,我们在这里不使用汇编...) - 自数学和Comp以来,用* FUNCTIONAL *编程语言声称这是一个可憎的罪行Sci不能以这种方式工作。真??? – Svartalf

回答

37

目前推荐的方法是使用ofDim

var myArray = Array.ofDim[Abcd](100, 60) 
23

或者,如果您愿意让您的数组开始ABCD的,而不是空值

Array.fill[ABCD](100,6) { new ABCD } 

或者如果ABCD以某种常规方式变化通过位置

Array.tabulate[ABCD](100,6) { (i,j) => new ABCD(i,j) } 
+0

您的意思是Array.tabulate [ABCD](100,6){(i,j)=> new ABCD(i,j)}? –

4

我知道这个问题的答案,但一个问题,我跑进的是,@ alexwriteshere的解决方案,并@小鸡的解决方案是唯一的好,如果你想要一个矩阵。

为了能够创建一个二维阵列(如果视为第一数量的行然后列数),这样做:

val array = Array.ofDim[Array[Char]](2) 
array(0) = Array.ofDim[Char](10) 
array(1) = Array.ofDim[Char](20)