2
が、私は今、私はv
にf
を適用し、ベースのいくつかの結果を選択したいv
スカラ:コレクションに関数を適用し、唯一のいくつかの結果の
def f(x: Int) = {
x + 3
}
val v = 0 to 10e7.toInt
に高価な機能f
、多くの価値を持っていると仮定し得いくつかの状態で。
私はこの
v.map(f).filter(_ > 10e7 - 5)
ようにそれを行うことができます。しかし全体v.map(f)
は、第1のメモリに保存されますので、それは全く現実的ではないのです。
それでは、他のオプションが行うことです。
for(a <- v if f(a) > 10e7 - 5) yield f(a)
しかし、今、私は問題外であるいくつかの要素のために二度Fを計算する必要があります!
結果全体を保存せずにフィルタリングを達成するにはどうすれば結果を得ることができますか?論理は次のようになります(明らかにこれは機能しません)。
for(a <- v) {
val b = f(a)
if(b > 10e7 - 5) yield b
}