【问题标题】:Scala conditional sum of elements in a filtered tuples list过滤元组列表中元素的Scala条件总和
【发布时间】:2013-01-03 03:26:34
【问题描述】:

我是 Scala 新手,需要一些关于如何组合的帮助 在元组列表上过滤和求和。

我需要的是过滤后的元组列表的整数之和 基本上是问题的答案:

所有设定权重的总和是多少?

下面的示例列表的结果应该是 20

列表很简单:

     val ln = List( ("durationWeight" , true, 10),
                    ("seasonWeight"   , true, 10),
                    ("regionWeight"   , false, 5),
                     ("otherWeight"   , false, 5)

根据布尔标志过滤列表很简单:

     val filtered = ln.filter { case(name, check, value) => check == true  }

返回我想要的元组。获得所有这些的总和似乎有效 有一张地图,然后是总和:

  val b = filtered.map{case((name, check, value) ) => value}.sum

这会返回我想要的所有设置权重的总和。

但是,我如何一步结合过滤器、映射和求和来完成所有这些操作, 理想情况下是优雅的单班轮?

感谢您的帮助。

【问题讨论】:

  • 欢迎来到 Stack Overflow,Marvin.Hansen!就像对未来的提示一样,没有必要编辑您的问题以反映问题已解决或包含解决方案 - 通过将答案标记为已接受,该功能已经内置。谢谢!

标签: list scala filter sum


【解决方案1】:
ln.collect{ case (_, true, value) => value }.sum

【讨论】:

  • 谢谢,这正是我想要的。
【解决方案2】:

另一种解决方法:

(0 /: ln)((sum,x) => if (x._2) sum + x._3 else sum)

【讨论】:

  • 这肯定会比先收集然后求和更快。
猜你喜欢
  • 2011-05-27
  • 2016-11-15
  • 1970-01-01
  • 2012-10-18
  • 1970-01-01
  • 2019-08-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多