Arrays Scala中数组的多维数组

Arrays Scala中数组的多维数组,arrays,scala,Arrays,Scala,我读过关于使用ofdim在scala中生成多维数组的文章,但是如果我不希望所有数组的大小都相同呢?。 我希望能够制作一个数组,数组大小不一,如下所示,但还没有找到任何东西 dist = [[1,2,3], [10, 11, 13, 15, 16, 17, 19], [25]] 您可以始终使用制表,然后根据索引构建所需的大小,或从大小列表映射到阵列本身: Array.tabulate(4)(i => Array.range(0,i)) // Array[Ar

我读过关于使用ofdim在scala中生成多维数组的文章,但是如果我不希望所有数组的大小都相同呢?。 我希望能够制作一个数组,数组大小不一,如下所示,但还没有找到任何东西

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

您可以始终使用
制表
,然后根据索引构建所需的大小,或从大小列表映射到阵列本身:

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也没有。您可以随意构建它们。

最好使用类似此数组的列表数组[List[Int]]。内部列表可以是可变长度的,以满足您的需要。或者列表列表,如果您不确定前面的外部数组长度

>P>如果考虑来自构建直方图的集合中的装箱值,考虑重复使用<代码>分区< /代码>(请参阅我的完整、相关、答案),像这样,

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)
  }
}
我们有

histo(bounds, dist)
res: Array[Array[Int]] = Array(Array(1, 2, 3), 
                               Array(10, 11, 13, 15, 16, 17, 19), 
                               Array(25))

一组不同长度或尺寸的数组?一组不同长度的数组,用于将物品放入箱子的东西;比如做一个直方图。为什么当我做var hist=Array.tablate(9)(i=>Array(0))并尝试打印hist时,我会得到如下结果[[I@5b895cb9@vyruz-
Array
没有打印其内容的
toString
方法。REPL将调用自己的打印例程,而不仅仅是调用
toString
;您可以
println(hist.map(u.mkString(“,”).mkString(“\n”)
或类似的方法查看元素。
histo(bounds, dist)
res: Array[Array[Int]] = Array(Array(1, 2, 3), 
                               Array(10, 11, 13, 15, 16, 17, 19), 
                               Array(25))