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