以前、Scala の Seq
が関数であることを書きましたが、
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