我讀過關於使用ofdim在scala中創建多維數組,但如果我不想讓所有數組的大小相同? 我想要能夠製作各種大小的數組,如下所示,但一直未能找到任何東西。Scala中的多維數組數組
dist = [[1,2,3],
[10, 11, 13, 15, 16, 17, 19],
[25]]
我讀過關於使用ofdim在scala中創建多維數組,但如果我不想讓所有數組的大小相同? 我想要能夠製作各種大小的數組,如下所示,但一直未能找到任何東西。Scala中的多維數組數組
dist = [[1,2,3],
[10, 11, 13, 15, 16, 17, 19],
[25]]
您可以隨時使用tabulate
,然後建立你需要指數的基礎上的大小,或從尺寸到陣列本身的列表映射:
Array.tabulate(4)(i => Array.range(0,i))
// Array[Array[Int]] = Array(Array(), Array(0), Array(0, 1), Array(0, 1, 2))
Array(3,7,1).map(i => Array.range(0,i))
// Array[Array[Int]] = Array(Array(0, 1, 2), Array(0, 1, 2, 3, 4, 5, 6), Array(0))
的JVM沒有真正的多維數組,只是數組的數組 - 所以Scala不會。儘管你可以隨意構建它們。
爲什麼當我做var hist = Array.tabulate(9)(i => Array(0))並嘗試打印hist時,我得到了類似於[[I @ 5b895cb9 – vyruz 2014-08-31 01:35:02
@vyruz - 'Array'沒有' toString'方法打印其內容。 REPL將調用它自己的打印例程而不是隻調用'toString';你可以'println(hist.map(_。mkString(「,」))。mkString(「\ n」))'或者其他來查看元素。 – 2014-08-31 01:38:49
更好地去像這樣的數組列表[列表[Int]]。內部列表可以是可變長度,滿足您的需求。或列表列表,如果您不確定外部數組的長度。
如果考慮裝箱從集合值建立柱狀圖考慮重複使用的partition
(見我的全力,相關的,在https://stackoverflow.com/a/24540089/3189923答案),這樣,
def histo(bounds: Array[Int], data: Array[Int]): Array[Array[Int]] = {
bounds match {
case Array(h) => Array(data)
case Array(h, t @ _*) => val (l,r) = data.partition(_ < h)
l +: histo(t.toArray,r)
}
}
因此,對於
val bounds = Array(10, 20, 30)
val dist = Array(1, 2, 3, 10, 11, 13, 15, 16, 17, 19, 25)
我們有
histo(bounds, dist)
res: Array[Array[Int]] = Array(Array(1, 2, 3),
Array(10, 11, 13, 15, 16, 17, 19),
Array(25))
各種長度或尺寸的數組數組? – 2014-08-31 00:30:11
一組不同長度的數組,用於將物品放入箱中;就像製作直方圖一樣。 – vyruz 2014-08-31 00:57:34