Scala日記

Scalaの備忘録。ときどき研究の話。

Argmax: Seqが関数であることを利用してmax値のインデックスを簡潔に取る

以前、ScalaSeq が関数であることを書きましたが、

ym.hatenadiary.jp

これを利用して、最大値のインデックスを取得する関数を簡潔に実装することが出来ます。

val seq = scala.util.Random.shuffle(1 to 10)
seq.indices.maxBy(seq)

美しいですね。

maxBy高階関数で、数式記号で言うところの argmax に相当します。ここでは、seq のインデックスを seq(という関数)で seq の中の実際の値に変換して、その値が最大になるようなインデックスを返しています。

Seq の拡張メソッドとして実装したい場合は以下のようにすればOK。

argmax in Scala