我已经阅读过使用ofdim在scala中创建多维数组但是如果我不希望所有数组都具有相同的大小呢? 我想要能够制作各种大小的数组,如下所示,但却找不到任何东西。
dist = [[1,2,3],
[10, 11, 13, 15, 16, 17, 19],
[25]]
答案 0 :(得分:1)
您始终可以使用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也没有。尽管你可以随意建立它们。
答案 1 :(得分:0)
最好像这个Array [List [Int]]那样使用List of List。内部列表可以是满足您需求的可变长度。或者List列表,如果您不确定前面的外部数组长度。
答案 2 :(得分:0)
如果从集合中考虑 binning 值来构建直方图,请考虑重复使用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))