Scala中的列表列表?

时间:2013-11-26 14:37:28

标签: list scala

我有一个网格(声明为List (of Lists)),每个3*3块被编入索引为0,下一个3*3块被编入索引{ {1}}等等。

我需要编写一个方法,在给定索引的情况下返回特定块中的元素(1)。

例如:b(0)应该给1 0 0 4 1 2 7 0 0

integers

2 个答案:

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