2013-12-07 5 views
0

Может кто-нибудь объяснить, что делает следующий код? (Гип возвращает List[(Int,Int,Set[Int])])Указатель списка списков в scala

def all(): List[(Int, Int, Set[Int])] = 
    { 
     list.zipWithIndex flatMap 
     { 
     case (row, r) => 
     row.zipWithIndex.withFilter(_._1 == 0) map 
     { 
      case (col, c) => (r, c, hyp(r, c)) 
     } 
     } 
    } 

список определяется как список списков целых чисел. Я понял, что «== 0» состоит в том, что метод должен получить доступ к элементам, равным 0, но я не понимаю, что именно делает zipWithIndex. Благодаря

ответ

0

zipWithIndex дает список (элемент, индекс) пар.

val list = List(1,2,3,101,330,302)  

list.zipWithIndex //> List((1,0), (2,1), (3,2), (101,3), (330,4), (302,5)) 

поэтому в данном примере:

def all(): List[(Int, Int, Set[Int])] = 
{ 
    // if list    = List(list1,  list2,  ...) 
    // list.zipWithIndex = List((list1, 0), (list2, 1), ...) 
    list.zipWithIndex flatMap 
    { 
    case (row, r) => // it gets (list1, 0) etc. 
    // if row   = (elem0,  elem1,  ...) // list1 
    // rowWithIndex = ((elem0, 0), (elem1, 1), ...) 
    row.zipWithIndex.withFilter(_._1 == 0) map // check for elem0 == 0 etc. 
    { 
     // so col here is cell value, r is row index, c is column index 
     case (col, c) => (r, c, hyp(r, c)) 

    } 
    } 
} 
3

Это не построчно-лайн объяснения, но я думаю, что ключ к пониманию может быть следующим:

('a' to 'c').zipWithIndex 
// Vector((a,0), (b,1), (c,2)) 
0

Я наблюдал вопросы прибывают, которые явно связаны с какой-то уступки, чтобы написать решатель судоку, и я также делал вид «разработка программного обеспечения Jeopardy», чтобы выяснить, какие проекты задают вопросы, которые публикуются ...

В любом случае, я предполагаю, что эта функция возвращает координаты и возможности для всех нераскрытых ячеек Sudoku.

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