Подтвердить что ты не робот

Выберите максимальный возраст С#

Я создал list<T>, который содержит коллекцию объектов, обладающих этими свойствами: X, Y, Z

Я хочу узнать, какой объект в коллекции имеет наибольший Z

Я попытался использовать функцию Max(), но я не понимаю, как она использовалась...

4b9b3361

Ответ 1

Макс используется для нахождения максимального значения свойства. После того как вы получите максимальное значение, вы можете выбрать те объекты, значение которых совпадает с предложением Where.

var maxZ = list.Max( obj => obj.Z );
var maxObj = list.Where( obj => obj.Z == maxZ );

Ответ 2

Чтобы получить объект с наибольшим значением Z, вы сортируете по значению Z в порядке убывания и получаете первый элемент:

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

Edit:
Изменен для использования метода IEnumerable.OrderByDescending вместо List.Sort.

Изменить 2:
Если вам нужна производительность, это примерно в четыре раза быстрее, чем самое быстрое решение LINQ:

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

Ответ 3

int maxAge = myList.Max(obj => obj.Z);

Используемый параметр - это лямбда-выражение. Это выражение указывает, какое свойство использовать (в данном случае Z), чтобы получить максимальное значение. Это достигнет максимального возраста. Если вам нужен объект с наибольшим возрастом, вы можете сортировать по возрасту и получить первый результат:

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

Если вы сделаете это так, обратите внимание, что если два или более элемента имеют максимальный возраст, выбирается только один из них.

Ответ 4

Если вы можете реализовать либо IComparable<T>, либо IComparable в своем классе в следующих строках:

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

Вы можете получить максимальное значение просто путем вызова (для этого потребуется using System.Linq):

MyClass maxObject = list.Max();

Это будет выполнять только один проход по вашему списку значений.

Ответ 5

Это будет во многом зависеть от типа 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);