如何在函数中的 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,因此 Nilelse 子句中。它是必需的,因此总有一个值 return 从函数中编辑。