0

次のコードがあるとします。

def findMinOpt(li: List[Option[Int]]): Option[Int] =
    {
      val listwithoutOptions = li.flatten
      listwithoutOptions.reduceLeftOption(_ min _)
    }

すべてのオプションを効果的に除外して新しいリストを作成し、最小値を返します。

このコードで見られる問題は、リストを 2 回処理することですが、実際には、キャッシュされていない 2 番目のリストが作成されるため、それよりも悪いことです。リストを一度だけ処理する慣用的な方法はありますか?

オプションの質問: ベンチマークはどのように実行しますか? 通常、OS はキャッシュ メカニズムを使用するため、テストを繰り返す間にそのキャッシュをクリアしたいと思います。それを行う方法はありますか?

4

2 に答える 2

1

view中間リストの作成を防ぐために使用できます

li.view.flatten.reduceLeftOption(_ min _)
于 2013-11-10T09:47:31.807 に答える