2012-02-13 54 views
4

我有2個包含彩票票據實例的列表。列表值的函數計算

一個列表包含獲得特別獎的門票,另一個列表包含獲得最終數字命中的門票。

現在我必須消除那些帶有多餘數字的門票並將獎品加在一起。

case class Ticket(number:Long, prize:Long) 

val specialPrizes = List(Ticket(42, 1000), Ticket(66, 2000)) 
val finalDigitPrizes = List(Ticket(42, 50)) 

這將產生與合併後的門票清單,其本身包含累積獎金:

val finalList = List(Ticket(42, 1050), Ticket(66, 2000)) 

什麼將是不溫 - 瓦爾功能上做到這一點,最有效的方法,指數櫃檯等?

回答

9
scala> (specialPrizes ++ finalDigitPrizes).groupBy(_.number).map { 
    | case (n, ts) => Ticket(n, ts.map(_.prize).sum) 
    | } 
res1: scala.collection.immutable.Iterable[Ticket] = List(Ticket(42,1050), Ticket(66,2000)) 
+0

'groupBy'再次獲勝。我應該總是使用它。 – 2012-02-13 20:19:51