Scala条件求和的元组在过滤的元组列表中

时间:2013-01-03 03:26:34

标签: list scala filter sum

我是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

返回所有设定权重的所需总和。

但是,如何在一步中结合使用filter,map和sum, 理想情况下,优雅的一个班轮?

感谢您的帮助。

2 个答案:

答案 0 :(得分:5)

ln.collect{ case (_, true, value) => value }.sum

答案 1 :(得分:1)

另一种解决方法:

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