0

我有一个名为的元组列表,列表中的item每个索引都包含 2 x Doubles 例如

item = ((1.0, 2.0), (3.0, 4.0), (10.0, 100.0))

我想对列表中的每个索引执行计算item,我正在尝试使用foldLeft. 这是我的代码:

item.foldLeft(0.0)(_ + myMethod(_._2, _._1, item.size)))

_._2访问item索引 1 处_._1的当前元组并访问item索引 0 处的当前元组。例如,对于第一个折叠,它实际上应该是:

item.foldLeft(0.0)(_ + myMethod(2.0, 1.0, item.size)))

第二折:

item.foldLeft(0.0)(_ + myMethod(4.0, 3.0, item.size)))

第三折:

item.foldLeft(0.0)(_ + myMethod(100.0, 10.0, item.size)))

我的方法在哪里:

def myMethod(i: Double, j:Double, size: Integer) : Double = {
  (j - i) / size
  }

它给了我一个错误,说参数太多,foldLeft因为它需要 2 个参数。 myMethod返回 a Double,并且_是 a Double。那么,编译器看到的这个额外参数在哪里呢?

如果我这样做:

item.foldLeft(0.0)(_ + _._1))

它总结了Double的每个索引中的所有第一个 s item- 将 _._1 替换为 _._2 总结了Double的每个索引中的所有第二个 s item

任何帮助是极大的赞赏!

4

1 回答 1

3

每个_都等价于一个新参数,(_ + myMethod(_._2, _._1, item.size))一个具有 3 个参数的匿名函数也是如此:(x, y, z) => x + myMethod(y._2, z._1, item.size).

你想要的是(acc, x) => acc + myMethod(x._2, x._1, item.size).

于 2014-12-04T19:57:16.660 回答