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

Mar*_*sen 0 scala sum list filter

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

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

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

对于下面的样本列表,结果应为20

这个清单很简单:

     val ln = List( ("durationWeight" , true, 10),
                    ("seasonWeight"   , true, 10),
                    ("regionWeight"   , false, 5),
                     ("otherWeight"   , false, 5)
Run Code Online (Sandbox Code Playgroud)

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

     val filtered = ln.filter { case(name, check, value) => check == true  }
Run Code Online (Sandbox Code Playgroud)

它返回了我想要的元组.获得所有它们的总和似乎与地图后跟sum:

  val b = filtered.map{case((name, check, value) ) => value}.sum
Run Code Online (Sandbox Code Playgroud)

这将返回所有设定权重的所需总和.

但是,我如何在一步中结合滤镜,地图和总和来完成所有这一切,理想情况下是优雅的一个班轮?

谢谢你的帮助.

huy*_*hjl 5

ln.collect{ case (_, true, value) => value }.sum
Run Code Online (Sandbox Code Playgroud)