2013-04-02 152 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)