0

私は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

これにより、設定されたすべての重みの必要な合計が返されます。

しかし、理想的にはエレガントなワンライナーで、フィルター、マップ、合計を組み合わせた1つのステップでこれらすべてを行うにはどうすればよいですか?

ご協力いただきありがとうございます。

4

2 に答える 2

5
ln.collect{ case (_, true, value) => value }.sum
于 2013-01-03T03:34:27.883 に答える
1

それの一体のための別のアプローチ:

(0 /: ln)((sum,x) => if (x._2) sum + x._3 else sum)
于 2013-01-03T03:48:15.940 に答える