访问Scala中列表中的索引

时间:2013-12-03 23:20:58

标签: list scala collections

我必须写一个方法" all()"它返回一个元组列表;当函数在列表中遇到0时,每个元组将包含与特定给定行和列相关的行,列和集合。我已经写了" hyp"返回我需要的设定部分的函数,例如:Set(1,2)。 我正在使用列表列表:

| 0 | 0 | 9 |
| 0 | x | 0 |
| 7 | 0 | 8 |

如果Set(1,2)指的是标记为x的单元格,则all()应返回:(1,1,Set(1,2)) 其中1,1是行和列的索引。

我使用zipWithIndex编写了这个方法但是我不能使用这个函数。在这种情况下,有没有更简单的方法来访问索引?提前致谢

代码:

 def all(): List[(Int, Int, Set[Int])] = 
 {
    puzzle.list.zipWithIndex flatMap 
    { 
      rowAndIndex =>
      rowAndIndex._1.zipWithIndex.withFilter(_._1 == 0) map 
      { 
        colAndIndex =>
        (rowAndIndex._2, colAndIndex._2,  hyp(rowAndIndex._2, colAndIndex._2)) 
      }
    }
 } 

(_._ 1 == 0)是因为函数只有在网格中找到0时才返回(Int,Int,Set())

1 个答案:

答案 0 :(得分:1)

all函数可以简化为:

// Given a list of list
puzzle.list = List(List(0, 0, 9), List(0, 5, 0), List(7, 0, 8))

for {

  (row, rIndex) <- puzzle.list.zipWithIndex   // List of (row, index)
                                              // List( (List(0,0,9), 0) ...

  (col, cIndex) <- row.zipWithIndex;          // List of (col, index)
                                              // List( (0,0), (0,1), (9, 2) ...

  if (col == 0)                               // keep only col with 0

} yield (rIndex, cIndex, hyp(rIndex, cIndex))