2013-11-26 2 views
0

У меня есть сетка (который объявлен как List (of Lists)), и каждый блок 3*3, например, как индексируются 0, следующий 3*3 блок индексируется в 1 и т.д.Список списков в Scala?

мне нужно написать метод, который возвращает элементы (integers) в конкретном блоке с индексом.

Например: Ь (0) должен дать 1 0 0 4 1 2 7 0 0

1 0 0 | 4 0 2 | 5 0 7 | 
4 1 2 | 0 0 3 | 6 8 0 | 
7 0 0 | 0 0 9 | 0 0 1 | 
---------------------- 
1 0 0 | 4 0 2 | 5 0 7 | 
9 0 2 | 0 4 3 | 1 8 0 | 
7 1 0 | 0 8 9 | 8 0 0 | 
---------------------- 
1 0 0 | 4 0 2 | 5 0 7 | 
4 0 2 | 0 1 9 | 6 2 0 | 
7 0 0 | 0 0 9 | 0 0 1 | 
---------------------- 
+1

не могли бы вы дать ясный пример. – tiran

ответ

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)) 
    } 
+0

'| x | x | o |', '| x | x | o |', '| o | o | o |' (3 строки, соответственно), здесь x обозначает выбранный блок (размером 2), o - остальная часть предметов. –

+0

@flavian см. Редактирование в вопросе – user2947615

+0

спасибо, пожалуйста, объясните это? Большое спасибо – user2947615

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 

(Извините, я слишком ленив к себе ite sudoku board в качестве примера :))

Чтобы получить список целых чисел, попробуйте flattern.

scala> block(1).flattern 
res38: List[Int] = List(4, 5, 6, 13, 14, 15, 22, 23, 34) 
+0

отправьте полную ошибку компиляции указателем. – tiran

Смежные вопросы