Scala中的多维数组数组

时间:2014-08-31 00:18:15

标签: arrays scala

我已经阅读过使用ofdim在scala中创建多维数组但是如果我不希望所有数组都具有相同的大小呢? 我想要能够制作各种大小的数组,如下所示,但却找不到任何东西。

dist = [[1,2,3],
        [10, 11, 13, 15, 16, 17, 19],
        [25]]

3 个答案:

答案 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))