いろいろ備忘録日記

主に .NET とか Go とか Flutter とか Python絡みのメモを公開しています。

Linq入門記-38 (LINQ To Object, Average)


今回は、Average拡張メソッドについてです。


Average拡張メソッドは、文字通り平均値を返します。


Average拡張メソッドには、非常に多くのオーバーロードが存在します。
ここでは、int32の分のみ記述します。
(decimal, int, long, single毎に引数無しと引数有りのパターンと、左記の型のNullable型の分)

public static int Average(
	this IEnumerable<int> source
)

public static int Average<TSource>(
	this IEnumerable<TSource> source,
	Func<TSource, int> selector
)


一つ目の書式が一番よく利用される形のものですね。
2つめの書式は、selectorが追加されています。
このオーバーロードを利用すると、特定のデータのみの合計を取得する事が出来ます。


以下、サンプルです。

    #region LinqSamples-35
    public class LinqSamples35 : IExecutable
    {
        public void Execute()
        {
            var numbers = new int[]
                          {
                              1, 2, 3, 4, 5, 6, 7, 8, 9, 10
                          };
            
            // 
            // Average拡張メソッドは、文字通り平均を求める拡張メソッド。
            //
            // Average拡張メソッドには、各基本型のオーバーロードが用意されており
            // (decimal, double, int, long, single及びそれぞれのNullable型)
            // それぞれに、引数無しとselectorを指定するバージョンのメソッドがある。
            //
            
            //
            // 引数無しのAverage拡張メソッドの使用.
            //
            Console.WriteLine("引数無し = {0}", numbers.Average());
            
            //
            // selectorを指定するAverage拡張メソッドの使用.
            //
            Console.WriteLine("引数有り = {0}", numbers.Average(item => (item % 2 == 0) ? item : 0));
        }
    }
    #endregion


実行結果は以下の通りです。

  引数無し = 5.5
  引数有り = 3

================================
過去の記事については、以下のページからご参照下さい。