次のプロパティを持つオブジェクトのコレクションを含む_list<T>
_を作成しました:X
、Y
、Z
コレクション内のどのオブジェクトが最も大きいかを知りたいZ
Max()
関数を使用しようとしましたが、それがどのように使用されるのかわかりません...
Maxは、プロパティの最大値を見つけるために使用されます。最大値を取得したら、Where句を使用して、値が一致するオブジェクトを選択できます。
var maxZ = list.Max( obj => obj.Z );
var maxObj = list.Where( obj => obj.Z == maxZ );
最大の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);
}
}
int maxAge = myList.Max(obj => obj.Z);
使用されるパラメーターはラムダ式です。この式は、最大値を取得するために使用するプロパティ(この場合はZ)を示します。これは最大年齢を取得します。最も古い年齢のオブジェクトが必要な場合は、年齢で並べ替えて、最初の結果を取得できます。
MyType maxItem = myList.OrderByDescending(obj => obj.Z).First();
この方法で行う場合、2つ以上のアイテムがすべて最大経過時間を持っている場合、そのうちの1つだけが選択されることに注意してください。
どちらかを実装できる場合IComparable<T>
またはIComparable
をクラスで次のように記述します。
public Int32 CompareTo(MyClass other) {
return Z.CompareTo(other.Z);
}
呼び出すだけで最大値を取得できます(これにはusing System.Linq
):
MyClass maxObject = list.Max();
これは、値のリストに対して単一のパスのみを実行します。
比較できる場合、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);