いろいろ備忘録日記

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

Linq入門記-37 (LINQ To Object, Min, Max)


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


Min, Max拡張メソッドは、文字通り最小値、最大値を返します。


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

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

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

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

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


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


以下、サンプルです。

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


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

  引数無し[Min] = 0
  引数無し[Max] = 99
  引数有り[Min] = 0
  引数有り[Max] = 98

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