今回は、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
================================
過去の記事については、以下のページからご参照下さい。
- いろいろ備忘録日記まとめ