Linqで快適な生活を


LinqにはSelectやAllなど便利なメソッドがいくつもあるのですが、中でも自分のお気に入りはAggregateです。例えば、リスト内で最大の値を持つ要素のIndexを知りたい場合は以下のように書くことが出来ます。

var l = new List<int>() {3, 1, 5, 4, 2};
var maxIdx = l.Select((val, idx) => new { V = val, I = Idx }).Aggregate((max, working) => (max.V > working.V) ? max : working).I;
// maxIdx は 2となる

上記の例では、OrderByDescendingを使った方が分かりやすいかもしれませんが、もっと複雑な条件にも対応できるのがAggregateの良いところですね。Dictionaryなどにも対応できるので、今日も快適な生活を送れます。また、途中の無名クラスへのselectも常套手段だったりします。