2012-02-13 16 views
4

私は宝くじチケットのインスタンスを含む2つのリストを持っています。リスト値の機能的計算

1つのリストには特別な賞が、2つ目のリストには最終的な数字が表示されます。

ここで、冗長な番号でチケットを削除し、賞を追加する必要があります。

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

は何等の一時-VARSせずに機能的にこれを行うための最も効果的な方法は、インデックス・カウンタを、次のようになります。

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

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

これは自身が蓄積した賞品が含まれているマージされたチケットのリストをもたらすのでしょうか?

答えて

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」が再び勝つ。私はいつもそれを使うべきです。 –