使用数组作为Scala foldLeft累加器

时间:2015-03-03 21:02:29

标签: scala functional-programming

我正在尝试在数组上使用foldLeft。例如:

var x = some array 
x.foldLeft(new Array[Int](10))((a, c) => a(c) = a(c)+1)

这拒绝编译,发现错误是Int(0)required Array [Int]。

2 个答案:

答案 0 :(得分:8)

为了在你想做的事情中使用foldLeft并遵循你的风格,你可以在计算中返回相同的累加器数组,如下所示:

val ret = a.foldLeft(new Array[Int](10)) {
      (acc, c) => acc(c) += 1; acc
    }

或者,由于您的数字是从0到9,您也可以这样做以获得相同的结果:

val ret = (0 to 9).map(x => a.count(_ == x))

答案 1 :(得分:2)

Scala中的赋值不返回值(而是Unit),因此应该返回Array [Int]以进行下一步的表达式返回不起作用的Unit。

你必须使用一个块并最终返回数组:

x.foldLeft(new Array[Int](10)) { (a, c) => 
  a(c) = a(c)+1
  a
}