在斯卡拉一个访问列表索引(Accessing an index in a list in Scala

2019-10-19 02:40发布

我必须写一个方法,“所有()”,它返回一个元组列表; 每个元组将包含行,列和设置相关的特定定的行和列,当函数列表中的满足0。 我已经写了“HYP”函数返回集合一部分,我需要,例如:集(1,2)。 我使用列表的列表:

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

如果集(1,2)指的是标为X的电池,所有的()应该返回:(1,1,组(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)是因为该函数具有返回(INT,INT,设置()),只有当它在网格找到0

Answer 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))   


文章来源: Accessing an index in a list in Scala