使用Scala中的列表创建块

时间:2013-11-26 13:30:07

标签: scala

给出一个4 x 4网格的类型 List[List[Int]] ,我需要创建4块(2 x 2)网格,我无法理解如何递归地执行此操作。

例如,如果给出块0,我需要显示第0列和第1列的第0行和第1行的值。但是如何在不打印其余列的情况下选择前2列的前2行的列。

有人可以帮忙吗?

由于

2 个答案:

答案 0 :(得分:0)

您可以使用takedropgroupedsplitAt等方法将行和列分成两半。

然后,递归地执行此操作,在递归的每个步骤将每个网格划分为四分之一,直到达到所需的最小网格(可能是2x2)。

当然,如果您只需要将4x4划分为2x2,则根本不需要递归。

答案 1 :(得分:0)

以下可以作为开头,

scala> val m = (1 to 16).toList.grouped(4).toList
m: List[List[Int]] = List(List(1, 2, 3, 4), List(5, 6, 7, 8), List(9, 10, 11, 12), List(13, 14, 15, 16))

scala> def takeQuod(r:Int, c:Int) = m.grouped(2).toList(r).map(_.grouped(2).toList(c))
takeQuod: (r: Int, c: Int)List[List[Int]]

scala> takeQuod(0,0)
res26: List[List[Int]] = List(List(1, 2), List(5, 6))