2013-01-03 92 views
0

我是Scala的新手,需要一些關於如何在元組列表中組合 過濾器和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 

它返回我所有的權重集想要的總和。

但是,如何在一個步驟中將濾波器,地圖和總和, 理想地結合在一個優雅的一個班輪中,我怎麼做?

感謝您的幫助。

+3

歡迎堆棧溢出,Marvin.Hansen!就像未來的提示一樣,沒有必要編輯您的問題以反映問題已經解決或包含解決方案 - 已經通過將答案標記爲已接受的方式來內置該功能。謝謝! – ceyko

回答

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

謝謝,那就是我正在尋找的。 –

+0

@ Marvin.Hansen:您可以將答案標記爲接受以獎勵正確的人。 – Emre

+0

yeap,剛剛那樣做 –

1

爲它赫克另一種方法:

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

這肯定會比收集然後求和更快。 – huynhjl