2

如何通过 Map 递归?

我正在寻找类似于列表递归的东西,如下所示。

def count(list: List[Int]): Int = { 
   def go(list: List[Int], acc: Int)) = {
      case x :: xs => go(xs, x + sum)
      case Nil => sum
   }
   go(list, 0)
}

fold请忽略orreduce可以在这里使用的事实。我提到这个尾递归函数作为我想要通过地图递归的示例。我希望能够accumulator在通过地图递归时附加到一个参数。

4

1 回答 1

0

您可以使用 .toSeq 或 .toList 或类似的方式将 Map 转换为 Seq,或者您可以定义自己的 Map 提取器,但最简单的方法是直接使用 head 和 tail。

def recursive[A, B](map: Map[A, B]): Int = 
  if (map.isEmpty) 0 else helper(map)

def helper[A, B](map: Map[A, B]): Int = (map.head, map.tail) match {
  case ((a, b), xs) if xs.isEmpty => 1
  case ((a, b), xs) => 1 + helper(xs)
}
于 2013-10-15T08:25:25.487 回答