我是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, 理想情况下,优雅的一个班轮?
感谢您的帮助。
答案 0 :(得分:5)
ln.collect{ case (_, true, value) => value }.sum
答案 1 :(得分:1)
另一种解决方法:
(0 /: ln)((sum,x) => if (x._2) sum + x._3 else sum)