我有一个网格(声明为List (of Lists)
),每个3*3
块被编入索引为0
,下一个3*3
块被编入索引{ {1}}等等。
我需要编写一个方法,在给定索引的情况下返回特定块中的元素(1
)。
例如:b(0)应该给1 0 0 4 1 2 7 0 0
integers
答案 0 :(得分:2)
implicit class MatrixOps[T](val l: List[List[T]]) extends AnyVal {
def getBlock(index: Int, size: Int = 3): List[T] = {
l map (_ drop index * size) take size flatMap (_ take size)
}
}
override def main(args: Array[String]): Unit = {
val x = List(
List(1, 2, 3),
List(4, 5, 6)
)
println(x.getBlock(0))
println(x.getBlock(1))
}
答案 1 :(得分:0)
尝试使用以下功能
def block(i:Int, grid:List[List[Int]]) = grid.
grouped(3).
toList(i / 3).
map(_.grouped(3).toList(i % 3))
这是一个很好的打印方法的例子
def print(q:List[List[Int]]) = q.map(_.mkString("\t")).mkString("\n")
val grid = (1 to 81).toList.grouped(9).toList
scala> print(block(1))
res37: String =
4 5 6
13 14 15
22 23 24
(对不起,我太懒了,不能把数独板写成一个例子:))
要获取整数列表,请尝试flattern
。
scala> block(1).flattern
res38: List[Int] = List(4, 5, 6, 13, 14, 15, 22, 23, 34)