C#のLINQで最小値の要素を取り出す方法

C#のLINQで最小値の要素を取り出す方法をいくつか調べてみました。

Aggregateを使う場合

using System;
using System.Collections.Generic;
using System.Linq;

public class Example1
{
  struct Example
  {
    public string name;
    public int value;
  }

  static public void Main ()
  {
    List list = new List<Example> {
      new Example { name = "aaa", value = 321 },
      new Example { name = "bbb", value = 432 },
      new Example { name = "ccc", value = 123 }
    };

    Example e = list.Aggregate((a, b) => a.value < b.value ? a : b);
    Console.WriteLine("{0}: {1}", e.name, e.value);
  }
}

実行結果

ccc: 123

OrderByとFirstを使う場合

using System;
using System.Collections.Generic;
using System.Linq;

public class Example2
{
  struct Example
  {
    public string name;
    public int value;
  }

  static public void Main ()
  {
    List list = new List<Example> {
      new Example { name = "aaa", value = 321 },
      new Example { name = "bbb", value = 432 },
      new Example { name = "ccc", value = 123 }
    };

    Example e = list.OrderBy(e => e.value).First();
    Console.WriteLine("{0}: {1}", e.name, e.value);
  }
}

実行結果

ccc: 123

リンク

Enumerable.Aggregate Method (System.Linq) | Microsoft Docs
https://docs.microsoft.com/en-us/dotnet/api/system.linq.enumerable.aggregate?view=netframework-4.7.2

関連記事

C#のコードを書くときに参考になる公式リンク
IEnumerable<T>のインターフェイス IEnumerable(T) Interface (System.Collections.Generic)https://msdn.microsoft.com/en-us/library/9eekhta0(v=vs.110).aspx LINQ standard query operators Standard Que...

C#の配列でPythonのmapのような操作
Pythonを使っているとmapというリストの操作が便利です。 >>> a = list(range(5)) >>> a [0, 1, 2, 3, 4] >>> list(map(lambda e: e*2+1, a)) [1, 3, 5, 7, 9] C#でもこれと同じようなことができないかと探してみたところ、LINQのSelectを使って同じような感じのコードが書...

Enumerable.Range
以前、LinqのSelectを使ってPythonのmapのような操作をする方法を書きました。 そこでは、 int[] a = new int[]{ 0, 1, 2, 3, 4 }; としていましたが、new int[]の代わりにEnumerable.Rangeを使うという方法もあるそうです。 using System; using System.Linq;...

C#でリストをソートする方法
C#でリストをソートしたい場合はLINQのOrderByを使うと簡単にできるようです。 using System; using System.Collections.Generic; using System.Linq; public class Example1 { static public void Main () { List list = new List<...

コメントを残す

メールアドレスが公開されることはありません。