scala中列表列表的索引

时间:2013-12-07 17:14:08

标签: list scala collections indexing

有人可以解释以下代码的作用吗? (hyp返回List[(Int,Int,Set[Int])]

  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究竟做了什么。谢谢

3 个答案:

答案 0 :(得分:3)

这不是逐行解释,但我认为理解的关键可能如下:

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

答案 1 :(得分: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))   

     }
   }
} 

答案 2 :(得分:0)

我一直在观看与编写Sudoku解算器的任务有明显关联的问题,我也一直在做一种'软件开发危险'来弄清楚设计的问题是什么张贴...

无论如何,我的猜测是这个函数返回所有未解决的Sudoku单元格的坐标和可能性。