集約用Aggregate演算子

プログラミングC# 第6版 8.3.9


要素を全て使用して単一の値を返すための演算子です。例えば要素数を返すCount演算子や、全ての要素の合計値を計算するSumなどがそれにあたります。

using System;
using System.Linq;

class Program {
    static void Main() {
        int[] nums = new int[] {2,4,6,8};
        
        Console.WriteLine("要素数:{0}", nums.Count() );
        Console.WriteLine("合計値:{0}", nums.Sum() );
    }
}
$ main
要素数:4
合計値:20

お次はタイトルにもあるようにAggregate演算子についてです。

これは汎用の演算子になっていてこの演算子を使えば全ての集約用演算子の処理を書くことが出来ます。

例として先程のCountやSumをAggrageteに置き換えてみましょう。

class Program {
    static void Main() {
        int[] nums = new int[] {2,4,6,8};
        
        Console.WriteLine("要素数:{0}", nums.Aggregate(0,(c,i) => c + 1) );
        Console.WriteLine("合計値:{0}", nums.Aggregate(0,(t,i) => t + i) );
    }
}

Aggregateの第一引数は初期値です。第二引数のラムダ式の第一引数(説明ややこしいw)にはラムダ式でreturnした値が渡って来ます。そして第二引数には要素の値が来ます。

なのでCountでは単に「c + 1」としていくだけで要素数を数えることができます。Sumは今まで加算されたtに要素iを足しこんでいくだけという感じです。