19

list<T>次のプロパティを持つオブジェクトのコレクションを含むを作成しました: XYZ

コレクション内のどのオブジェクトが最大かを調べたいZ

関数を使ってみたのMax()ですが、使い方がわかりません...

4

5 に答える 5

35

Max は、プロパティの最大値を見つけるために使用されます。最大値を取得したら、Where 句を使用して値が一致するオブジェクトを選択できます。

var maxZ = list.Max( obj => obj.Z );
var maxObj = list.Where( obj => obj.Z == maxZ );
于 2009-09-28T20:16:22.720 に答える
20

最大の Z 値を持つオブジェクトを取得するには、Z 値で降順に並べ替え、最初の項目を取得します。

TypeOfObject oldest = list.OrderByDescending(x => x.Z).First();

編集:
List.Sort の代わりに IEnumerable.OrderByDescending メソッドを使用するように変更しました。

編集 2:
パフォーマンスが必要な場合、これは最速の LINQ ソリューションよりも約 4 倍高速です。

int high = Int32.MinValue;
List<TypeOfObject> highest = new List<TypeOfObject>();
foreach (TypeOfObject v in list) {
   if (v.Z >= high) {
      if (v.Z > high) highest.Clear();
      high = v.Z;
      highest.Add(v);
   }
}
于 2009-09-28T20:16:56.820 に答える
7
int maxAge = myList.Max(obj => obj.Z);

使用されるパラメーターはラムダ式です。この式は、最大値を取得するために使用するプロパティ (この場合は Z) を示します。これにより、最大年齢が取得されます。年齢が最も高いオブジェクトが必要な場合は、年齢で並べ替えて最初の結果を取得できます。

MyType maxItem = myList.OrderByDescending(obj => obj.Z).First();

このようにすると、2 つ以上のアイテムがすべて最大の年齢を持つ場合、そのうちの 1 つだけが選択されることに注意してください。

于 2009-09-28T20:13:13.107 に答える
1

これらの行に沿ってクラスにIComparable<T>またはを実装できる場合:IComparable

public Int32 CompareTo(MyClass other) {
  return Z.CompareTo(other.Z);
}

呼び出すだけで最大値を取得できます(これには が必要ですusing System.Linq):

MyClass maxObject = list.Max();

これは、値のリストに対して単一のパスのみを実行します。

于 2009-09-28T20:28:17.720 に答える
0

比較可能かどうかは、X のタイプに大きく依存します。

var array = new[] { 
    new { X = "a", Y = "a", Z = 1 }, 
    new { X = "b", Y = "b", Z = 2 } 
};
var max = array.Max(x => x.Z);
Console.WriteLine(max);
于 2009-09-28T20:15:28.290 に答える