我有以下类定义和列表
class myclass{
val val1: Int = 1
val val2: Int = 2
...
}
val mylist = List(a: myclass, b: myclass, c: myclass, d: myclass)
如何将下一行代码转换为下划线符号
mylist.foldLeft(0)((x,y) => x + y.val1 * y.val2)
我知道下一行不起作用:
(0 /: mylist)(_ + _.val1 * _.val2)
这是因为第一个_
被引用到x
,第二个被引用到y
,但是第三个_
标量不知道引用了哪个变量,我的问题是,是否有一种可行的方法
答案 0 :(得分:2)
这不太疯狂:
scala> case class C(v: Int, w: Int)
defined class C
scala> val cs = List(C(1,2),C(3,4))
cs: List[C] = List(C(1,2), C(3,4))
scala> cs.iterator.map(c => c.v*c.w).foldLeft(0)(_+_)
res0: Int = 14
它表示操作是独立的。迭代避免了中间列表。