Scala:迭代/累积整数范围的List

时间:2013-10-16 23:53:27

标签: scala functional-programming immutability accumulate

我是Scala的新手。我正在尝试做以下事情:

def foo(n: Int): List[Int] = {
  def worker(i: Int, acc: List[Int]): List[Int] = {
    if (i == 0) acc
    else worker(i - 1, compute(i) :: acc)
  }
  worker(n, List[Int]())
} 
  • foo从0迭代到n
  • 对于每次迭代,它会在不可变列表上更新/累积。

我想要做的是使用像foldLeft这样的东西更简洁地表达。

如果foo遍历List,则可以使用高阶变换函数,例如mapreduceLeft。我可以利用这种功能,但想知道是否有更多的优雅方式来完成这种任务。

C ++中的相应代码如下所示:

list<int> foo(int n) {
  list<int> result;
  for (int i = 0; i < n; ++i)
    result.push_back(compute(i));
  return result;
}

1 个答案:

答案 0 :(得分:2)

怎么样:

def foo2(n: Int) = (1 to n).foldLeft(List[Int]())((l,i) => l :+ compute(i))

甚至:

def foo2(n: Int) = (1 to n).foldLeft(List[Int]())(_ :+ compute(_))