私はScalaが初めてで、コレクションをフィルタリングしてマップする最良の方法を見つけようとしています。これは私の問題を説明するおもちゃの例です。
アプローチ 1:リストを 2 回繰り返し、各繰り返しで同じ値を計算しているため、これはかなり悪い方法です。
val N = 5
val nums = 0 until 10
val sqNumsLargerThanN = nums filter { x: Int => (x * x) > N } map { x: Int => (x * x).toString }
アプローチ 2:これはわずかに優れていますが、それでも(x * x)
2 回計算する必要があります。
val N = 5
val nums = 0 until 10
val sqNumsLargerThanN = nums collect { case x: Int if (x * x) > N => (x * x).toString }
では、コレクションを 2 回反復せずにこれを計算し、同じ計算を繰り返さないようにすることは可能ですか?