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);