コレクション内のすべてのオブジェクトのプロパティに対して .Max() を実行し、最大値を持つオブジェクトを返す方法 [重複] 質問する

コレクション内のすべてのオブジェクトのプロパティに対して .Max() を実行し、最大値を持つオブジェクトを返す方法 [重複] 質問する

2 つの int プロパティを持つオブジェクトのリストがあります。このリストは別の linq クエリの出力です。オブジェクト:

public class DimensionPair  
{
    public int Height { get; set; }
    public int Width { get; set; }
}

リスト内でプロパティ値が最大のオブジェクトを見つけて返しますHeight

値の最高値を取得することはできますHeightが、オブジェクト自体は取得できません。

これを Linq で実行できますか? 方法は?

ベストアンサー1

私たちは拡張メソッドまさにこれをもっと見る実装はここで確認できますが、基本的には、これまでに確認した最大要素と、投影下で生成された最大値を記憶しながら、データを反復処理するケースです。

あなたの場合は、次のようなことをするでしょう:

var item = items.MaxBy(x => x.Height);

これは、Mehrdad の 2 番目の解決策 (基本的に と同じ) を除いて、ここで提示されているどの解決策よりも優れています (IMO) MaxBy

  • これはO(n)であり、前回の承認済み回答これは、各反復で最大値を見つけます(O(n^2)になります)。
  • 順序付けの解はO(n log n)である。
  • 値を取得してMax、その値を持つ最初の要素を見つけるのは O(n) ですが、シーケンスを 2 回反復します。可能な場合は、LINQ をシングル パス方式で使用する必要があります。
  • 集約バージョンよりも読みやすく理解しやすく、要素ごとに投影を1回だけ評価します。

おすすめ記事