如何在函数中的 scala 中创建元组列表?
How can I make a list of tuples in scala in a function?
我正在尝试在递归函数中创建一个充满元组的列表,这样列表可以在迭代时变大。我只是不知道如何在 scala 中实现这一点。
def tryToClaimPosition(player: Int, horizontal: Int , vertical: Int , list: List[(Int, Int)]): Unit = {
if (vertical == gridsize - 1) {
println(list);
}
if (horizontal < gridsize - 1) {
if (gameBoard(horizontal)(vertical) == player) {
val tuple = (horizontal,vertical)
val list2 = list :: tuple
tryToClaimPosition(player, horizontal + 1, vertical, list2)
else {
tryToClaimPosition(player, horizontal + 1, vertical, list)
}
}
正如您在上面的代码片段中看到的那样,我有一个元组列表,我有一个元组,但我无法添加它。
您的代码有很多明显的逻辑和语法错误。与您的问题最相关的是,list :: tuple
无法编译,因为 ::
方法的 right 端必须是 List
。
使用 ::
将 List
添加到 List
。
我会改用不可变列表,那将是一个累加器。这将是一种更实用的方式。该函数不会有副作用,并且会 return 结果 List
:
def tryToClaimPosition(player: Int, horizontal: Int , vertical: Int , list: List[(Int, Int)]): List[(Int, Int)] = {
if (vertical == gridsize - 1) {
list.reverse
}
if (horizontal < gridsize - 1) {
if (gameBoard(horizontal)(vertical) == player) {
val tuple = (horizontal, vertical)
tryToClaimPosition(player,horizontal + 1, vertical, tuple::list)
else {
tryToClaimPosition(player,horizontal + 1, vertical, list)
}
} else Nil
}
注意,我已将元组添加到列表中,因为它需要固定时间(添加与 List
的大小成正比)。这就是我 returning list.reverse
的原因,以便保持原始顺序。
我也问了horizontal > gridsize - 1
的情况。你的程序什么都不做,所以我假设,什么都不应该 returned,因此 Nil
在 else
子句中。它是必需的,因此总有一个值 return 从函数中编辑。
我正在尝试在递归函数中创建一个充满元组的列表,这样列表可以在迭代时变大。我只是不知道如何在 scala 中实现这一点。
def tryToClaimPosition(player: Int, horizontal: Int , vertical: Int , list: List[(Int, Int)]): Unit = {
if (vertical == gridsize - 1) {
println(list);
}
if (horizontal < gridsize - 1) {
if (gameBoard(horizontal)(vertical) == player) {
val tuple = (horizontal,vertical)
val list2 = list :: tuple
tryToClaimPosition(player, horizontal + 1, vertical, list2)
else {
tryToClaimPosition(player, horizontal + 1, vertical, list)
}
}
正如您在上面的代码片段中看到的那样,我有一个元组列表,我有一个元组,但我无法添加它。
您的代码有很多明显的逻辑和语法错误。与您的问题最相关的是,list :: tuple
无法编译,因为 ::
方法的 right 端必须是 List
。
使用 ::
将 List
添加到 List
。
我会改用不可变列表,那将是一个累加器。这将是一种更实用的方式。该函数不会有副作用,并且会 return 结果 List
:
def tryToClaimPosition(player: Int, horizontal: Int , vertical: Int , list: List[(Int, Int)]): List[(Int, Int)] = {
if (vertical == gridsize - 1) {
list.reverse
}
if (horizontal < gridsize - 1) {
if (gameBoard(horizontal)(vertical) == player) {
val tuple = (horizontal, vertical)
tryToClaimPosition(player,horizontal + 1, vertical, tuple::list)
else {
tryToClaimPosition(player,horizontal + 1, vertical, list)
}
} else Nil
}
注意,我已将元组添加到列表中,因为它需要固定时间(添加与 List
的大小成正比)。这就是我 returning list.reverse
的原因,以便保持原始顺序。
我也问了horizontal > gridsize - 1
的情况。你的程序什么都不做,所以我假设,什么都不应该 returned,因此 Nil
在 else
子句中。它是必需的,因此总有一个值 return 从函数中编辑。