2013-11-26 2 views
0

Учитывая сетку 4 x 4 типа List[List[Int]] , мне нужно создать 4 блока (2 x 2) сетки, я не могу понять, как это сделать рекурсивно.Создание блока с использованием списков в Scala

Например, если мне задан блок 0, мне нужно показать значения строки 0 и строки 1 столбца 0 и столбца 1. Но как я могу выбрать первые 2 строки первых двух столбцов без печати остальные столбцы.

Может ли кто-нибудь помочь?

Благодаря

+2

вы должны быть в состоянии сделать это в общем делать? Получить 4 блока блоков (n/2 x n/2)? Или это всего лишь 4 х 4-4 (2 х 2) блока? – Martijn

+0

4 X4 - 4 (2x2) он должен быть рекурсивным. – tas

+0

Лучше всего не делать это рекурсивно для одного решения. – Martijn

ответ

0

Вы можете использовать методы, такие как take, drop, grouped и splitAt разделить строки и столбцы пополам.

Речь идет об этом, разделив каждую сетку на четверти на каждом этапе рекурсии, пока вы не достигнете наименьшей требуемой сетки (предположительно, 2x2).

Конечно, если вам нужно всего лишь разделить 4x4 на 2x2, вам не нужно вообще возвращаться.

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)) 
Смежные вопросы