【发布时间】:2016-01-14 16:05:02
【问题描述】:
我正在做一个 Scala 练习,要求我创建一个 4 行 5 列的二维数组,并在每个元素中存储行索引+列索引+5。此外,我必须按行和列对数组求和,并打印总行数和总列数。我很困惑,我只知道如何创建一个空数组。
val matrix = Array.ofDim[Int](4, 5)
你能教我如何做剩下的练习吗?
【问题讨论】:
标签: scala
我正在做一个 Scala 练习,要求我创建一个 4 行 5 列的二维数组,并在每个元素中存储行索引+列索引+5。此外,我必须按行和列对数组求和,并打印总行数和总列数。我很困惑,我只知道如何创建一个空数组。
val matrix = Array.ofDim[Int](4, 5)
你能教我如何做剩下的练习吗?
【问题讨论】:
标签: scala
我不会告诉你“练习的其余部分”,但我会尝试展示一种创建 2D 集合的方法,例如本例中的数组:
val matrix1D = for {
rowIndex <- (0 until 4).toArray
colIndex <- (0 until 5).toArray
} yield rowIndex + colIndex + 5
在哪里
scala> :t matrix1D
Array[Int]
现在理解的结果是二维数组的一维版本。
编辑
我可能会给你更多提示:
scala> (0 to 11).toArray.grouped(4).toArray
res10: Array[Array[Int]] = Array(Array(0, 1, 2, 3), Array(4, 5, 6, 7), Array(8, 9, 10, 11))
scala> .transpose
res11: Array[Array[Int]] = Array(Array(0, 4, 8), Array(1, 5, 9), Array(2, 6, 10), Array(3, 7, 11))
编辑
从matrix1D 创建matrix2D 之后:
val matrix2D = matrix1D.??????????????????
在哪里
scala> :t matrix2D
Array[Array[Int]]
要打印出来,你可以简单地使用mkString:
scala> matrix2D.map(_.mkString("\t")).mkString("\n")
res32: String =
5 6 7 8 9
6 7 8 9 10
7 8 9 10 11
8 9 10 11 12
【讨论】:
(0 to 11).toArray.grouped(4).toArray 正在显示此输出 res0: Array[Array[Int]] = Array([I@6e7baf36, [I@5c7942fc, [I@2caed06a, [I@6272a544) 而不是您显示的内容
scala-2.11.4:欢迎使用 Scala 版本 2.11.4(Java HotSpot(TM) 64 位服务器 VM,Java 1.7.0_72)。键入表达式以对其进行评估。键入 :help 以获取更多信息。 scala> (0 to 11).toArray.grouped(4).toArray res0: Array[Array[Int]] = Array(Array(0, 1, 2, 3), Array(4, 5, 6, 7),数组(8、9、10、11))