繁体   English   中英

如何在scala中使用fold / reduce实现这一目标?

[英]How to use fold/reduce to achieve this in scala ?

我上课

case class PlaceHolder(time: Long, a: Int, b: Int) 

我有一个PlaceHolder对象列表,我想创建一个对象,其中包含字段ab的所有值的总和。 我不在乎time 我相信它可以通过折叠/减少操作来完成,但无法弄清楚如何使用两个字段来完成。

scala> val range = 1 to 10
range: scala.collection.immutable.Range.Inclusive = Range(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

scala> val placeholders = for{ i <- range} yield PlaceHolder(i,i,i) 
placeholders: scala.collection.immutable.IndexedSeq[PlaceHolder] = Vector(PlaceHolder(1,1,1), PlaceHolder(2,2,2), PlaceHolder(3,3,3), PlaceHolder(4,4,4), PlaceHolder(5,5,5), PlaceHolder(6,6,6), PlaceHolder(7,7,7), PlaceHolder(8,8,8), PlaceHolder(9,9,9), PlaceHolder(10,10,10))
placeholders.foldLeft(PlaceHolder(0,0,0))((acc, p) => PlaceHolder(acc.time + p.time, acc.a + p.a, acc.b + p.b))

要么

placeholders.reduce((acc, p) => PlaceHolder(acc.time + p.time, acc.a + p.a, acc.b + p.b))

或者您可以在PlaceHolder添加+运算PlaceHolder

case class PlaceHolder(time: Long, a: Int, b: Int) {
    def +(other: PlaceHolder) = PlaceHolder(this.time + other.time, this.a + other.a, this.b + other.b)
}

那么您可以执行以下操作:

placeholders.reduce(_ + _)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM