[C# LINQ] 配列、リスト各要素の合計、最小値、最大値を求める

配列、コレクションの合計を取得するにはSumメソッド、各要素の中から最小値を取得するにはMinメソッド、最大値を取得するにはMaxメソッドを使います。

LINQを使うにはソースの先頭にusing System.Linq;を付けてください。

配列、コレクションの要素が数値だけ(int[]List<double>など)の場合は各メソッドに引数はありません。
各要素に複数の項目がある場合は各メソッドの引数に集計に使う項目を返すメソッドを指定します。

using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
    public static void Main()
    {
        // 配列の各要素の合計、最小値、最大値
        int[] ary = new int[] { 2, 4, 1, 6, 8, 7 };
        Console.WriteLine($"aryの合計 ={ary.Sum()}");
        Console.WriteLine($"aryの最小値={ary.Min()}");
        Console.WriteLine($"aryの最大値={ary.Max()}");

        // Listの各要素の合計、最小値、最大値
        List<int> list = new List<int> { 2, 4, 1, 6, 8, 7 };
        Console.WriteLine($"listの合計 ={list.Sum()}");
        Console.WriteLine($"listの最小値={list.Min()}");
        Console.WriteLine($"listの最大値={list.Max()}");

        // Dictionaryの各要素の合計、最小値、最大値
        // Sum、Min、Maxの各引数に集計する項目を返すメソッドを指定する
        Dictionary<string, int> dic = new Dictionary<string, int> {
            { "a", 90 },
            { "b", 20 },
            { "c", 30 },
            { "d", 10 },
        };
        Console.WriteLine($"dicの合計 ={dic.Sum(kv => kv.Value)}");
        Console.WriteLine($"dicの最小値={dic.Min(kv => kv.Value)}");
        Console.WriteLine($"dicの最大値={dic.Max(kv => kv.Value)}");
    }
}

処理結果はこんな感じです。

aryの合計 =28
aryの最小値=1
aryの最大値=8
listの合計 =28
listの最小値=1
listの最大値=8
dicの合計 =150
dicの最小値=10
dicの最大値=90

また、MinとMaxは日付型(DateTime)のコレクションにも使えます。

using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
    public static void Main()
    {
        List<DateTime> list = new List<DateTime> { 
            new DateTime(2020, 6, 15),
            new DateTime(2020, 6, 10),
            new DateTime(2020, 6, 12),
        };

        Console.WriteLine($"Min = {list.Min()}");
        Console.WriteLine($"Max = {list.Max()}");
    }
}
Min = 2020/06/10 0:00:00
Max = 2020/06/15 0:00:00

C# プログラミング講座に戻る

コメント

タイトルとURLをコピーしました