将矩阵定义为列表列表。
scala> val matrix = List(List(0,1,2,3),List(4,5,6,7), List(8,9,10,11),List(11,12,13,14))
matrix: List[List[Int]] = List(List(0, 1, 2, 3), List(4, 5, 6, 7), List(8, 9, 10, 11), List(11, 12, 13, 14))
将行分组并匹配每个组以使用andgrouped
提取前半部分和后半部分take
takeRight
scala> matrix.grouped(2).flatMap(xs => xs match {
| case x: List[List[Int]] => List(x.head.take(2) ::: x.last.take(2), List(x.head.takeRight(2) ::: x.last.takeRight(2)))
| })
res0: Iterator[List[Any]] = non-empty iterator
scala> res0.toList
res1: List[List[Any]] = List(List(0, 1, 4, 5), List(List(2, 3, 6, 7)), List(8, 9, 11, 12), List(List(10, 11, 13, 14)))
这将适用于方阵,您将不得不为其他大小的矩阵做更多的工作。