今回は.NET 6で追加されたLINQのMaxBy / MinByについてメモ。
.NET 6 より前ではどうしてた?代用できるメソッドはあるの?といったところもあります。
■ まずはMaxBy / MinBy (.NET 6)
■ MaxとFirstの合わせ技 (.NET 5以前)
■ Aggregateで代用 (.NET 5以前)
■ 拡張メソッド (.NET 5以前)
■ 全体ソース
まずはMaxBy / MinBy (.NET 6)
こんなListがあったとして
MaxBy、MinByを呼んでやると
最大、最小の年齢に合致した最初の要素を返してくれます。 なんで今までなかったのか不思議ですが、ラクに取得できるようになったので嬉しいですね。
MaxとFirstの合わせ技 (.NET 5以前)
LINQでパッと思い付くのはこれでしょうか。Max()で値を取得して、その値を保持している最初の要素をFirst()で取得。
Aggregateで代用 (.NET 5以前)
集計処理をしてくれるAggregateを使用して実現できます。
xに大きい方の値を保持していき、各要素yとの比較を繰り返していきます。
今回はMaxBy/MinByに合わせて最初の要素を得るために「>=」としていますが、
最後の要素が欲しいということであれば「>」にすればOK。
拡張メソッド (.NET 5以前)
何度もAggregateを呼ぶことになるなら拡張メソッドを用意しておけばOK。
呼び方は.NET 6のMaxBy()と全く同じように書けます。
全体ソース
全体ソースを貼っておきます。 .NET 6 はmainメソッドを書く必要なくなりましたね。 .NET 5 以前のソースは言語バージョンによっては動かない書き方もしてますが、 そのままコピペしてvscodeのCode Runnerで実行できます。
.NET 6
.NET 5 以前
以上、もりもりでした。