【问题标题】:How to use fold/reduce to achieve this in scala ?如何在 scala 中使用折叠/减少来实现这一点?
【发布时间】:2014-05-29 00:10:44
【问题描述】:

我有课

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))

【问题讨论】:

    标签: scala reduce fold


    【解决方案1】:
    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

    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(_ + _)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多