List 从列表中查找行的索引

List 从列表中查找行的索引,list,scala,search,scala-collections,List,Scala,Search,Scala Collections,我试图使用Scala从一个由整数列表组成的列表中获取一行的索引list[list[Int]]。我已经有两个函数,给定行索引/列索引和网格作为参数,它输出该行中的所有元素。我需要的是一个函数,该函数给定一个特定元素(例如:0),它会找到它的行索引和列索引,并将它们放在一个列表中:list[(Int,Int)]。我试图编写一个函数,在遇到0时返回索引,然后将该函数传递给整个网格。我不知道我做得对不对。而且,我不知道如何返回列表 此外,我不能使用任何循环。 提前谢谢 def Possibilitie

我试图使用Scala从一个由整数列表组成的列表中获取一行的索引
list[list[Int]]
。我已经有两个函数,给定行索引/列索引和网格作为参数,它输出该行中的所有元素。我需要的是一个函数,该函数给定一个特定元素(例如:
0
),它会找到它的行索引和列索引,并将它们放在一个列表中:
list[(Int,Int)]
。我试图编写一个函数,在遇到0时返回索引,然后将该函数传递给整个网格。我不知道我做得对不对。而且,我不知道如何返回列表

此外,我不能使用任何循环。

提前谢谢

 def Possibilities(): List[Int] =  {

     def getRowIndex(elem: Int): Int = elem match
   {
     case 0 => sudoku.grid.indexOf(sudoku.row(elem))
     case x => x
    } 

 val result1 = sudoku.grid map {row => row map getRowIndex}
}

我认为,对于二维,用
编写这样一个方法来理解
要容易得多

给定一个
列表[List[Int]
如下:

val grid = List(
     List(1, 2, 3),
     List(4, 5, 6),
     List(3, 2, 1))
我们只需浏览所有行和列,并检查每个元素是否是我们要查找的元素:

def possibilities(findElem: Int): List[(Int, Int)] = {
  for (
    (row, rowIndex) <- grid.zipWithIndex;
    (elem, colIndex) <- row.zipWithIndex
    if elem == findElem
  ) yield (rowIndex, colIndex)
}

步骤1,创建所有可能的索引元组的集合,使用
表示理解(
for
看起来像一个循环,但实际上不是)


我被限制使用任何loopsAh,对不起,我不知道。没问题,
理解的
可以映射到
map
flatMap
等的组合(请参见)。是否可以解释此行的作用:grid.zipWithIndex
zipWithIndex
由列表定义(请参见此处:);它将一个列表(如
列表(“Alice”,“Bob”)
)转换为一个列表,其中每个元素都包含原始元素及其索引的元组(例如,对于上面的示例:
列表((“Alice”,0),(“Bob”,1))
)。只需使用Scala REPL并使用它即可!:-)并非所有方法都是错误的(例如,您认为应该使用
映射
),但某些方面是错误的(例如
可能性
的签名应该返回一个
列表[(Int,Int)]
),在其他方面,您的解决方案只是不完整(例如,需要返回索引)。我建议您在REPL中玩转代码,阅读所有重要主题以解决任务(例如
for
表达式、元组、
列表
)。
def possibilities(findElem: Int): List[(Int, Int)] = {
  grid.zipWithIndex flatMap { rowAndIndex =>
    rowAndIndex._1.zipWithIndex.withFilter(_._1 == findElem) map { colAndIndex =>
      (rowAndIndex._2, colAndIndex._2)
    }
  }
} 
val tuples = for (i <- grid.indices; j <- grid.head.indices) yield (i, j)
tuples.filter { case (i, j) => grid(i)(j) == valueToFind }