2013-01-03 4 views
0

저는 스칼라를 처음 접했고 필터와 합계를 튜플 목록에 결합하는 방법에 대해 약간의 도움이 필요합니다.필터링 된 튜플 목록의 스칼라 조건부 합계

내가 필요로하는 필터링 튜플 목록의 정수의 합이되는 본질적 질문에 대한 답 :

모든 설정 가중치의 합은 무엇입니까? 그 결과

목록 아래 샘플 목록 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

에 오신 것을 환영합니다! 미래를위한 팁처럼, 문제가 해결되었거나 해결책을 포함한다는 것을 반영하기 위해 질문을 편집 할 필요가 없습니다. 그 기능은 이미 응답을 받아 들인 것으로 표시하여 내장되어 있습니다. 감사! – ceyko

답변

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

고마워, 그게 내가 찾고 있던 바로 그거야. –

+0

@ Marvin.Hansen : 답변을 수락 한 것으로 표시하여 적절한 사람에게 보상을 제공 할 수 있습니다. – Emre

+0

yeap, 방금 완료했습니다 –

1

그것의 지옥을위한 또 다른 방법 : 스택 오버플로, Marvin.Hansen에

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

확실히 수집하고 나서 합계보다 빠릅니다. – huynhjl