1. ホーム
  2. list

List<myType>から最大値を取得する

2023-10-20 09:09:15

質問

私はリスト List<MyType> で、私の型には AgeRandomID

さて、このリストから最大年齢を求めたいと思います。

最もシンプルで効率的な方法は何でしょうか?

どのように解決するのですか?

なるほど、LINQがなければハードコードすればいいんですね。

public int FindMaxAge(List<MyType> list)
{
    if (list.Count == 0)
    {
        throw new InvalidOperationException("Empty list");
    }
    int maxAge = int.MinValue;
    foreach (MyType type in list)
    {
        if (type.Age > maxAge)
        {
            maxAge = type.Age;
        }
    }
    return maxAge;
}

あるいは、より一般的なバージョンを書いて、多くのリストタイプで再利用できるようにすることもできます。

public int FindMaxValue<T>(List<T> list, Converter<T, int> projection)
{
    if (list.Count == 0)
    {
        throw new InvalidOperationException("Empty list");
    }
    int maxValue = int.MinValue;
    foreach (T item in list)
    {
        int value = projection(item);
        if (value > maxValue)
        {
            maxValue = value;
        }
    }
    return maxValue;
}

と一緒に使うことができます。

// C# 2
int maxAge = FindMaxValue(list, delegate(MyType x) { return x.Age; });

// C# 3
int maxAge = FindMaxValue(list, x => x.Age);

あるいは LINQBridge :)

いずれの場合も、ifブロックを返すには、単純な呼び出しで Math.Max を使うことができます。例えば

foreach (T item in list)
{
    maxValue = Math.Max(maxValue, projection(item));
}