有人可以解释以下代码的作用吗? (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究竟做了什么。谢谢
答案 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单元格的坐标和可能性。