Найти наивысшее целое число в общем списке с помощью С#?

У меня есть следующая коллекция List<int>, и мне нужно найти наивысшее целое число в коллекции. Он может иметь произвольное число целых чисел, и я могу иметь одно и то же целочисленное значение несколько раз.

List<int> MyList = new List<int> { 3, 4, 6, 7, 9, 3, 4, 5, 5 };

Каков самый простой алгоритм для поиска наивысшего целого? Я использую С# и .NET 3.5 framework.

Ответ 1

Вы можете просто сделать:

int max = MyList.Max();

Подробнее см. Enumerable.Max.

Ответ 2

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

public class MaxList<T> : IList<T>, ICollection<T>, IEnumerable<T>
{
    T Maximum { get; set; }
    List<T> _list;

    public T this[int index] { get; set; }

    public void Add(T item)
    {
        if (item > this.Maximum)
        {
            this.Maximum = item;
        }
        _list.Add(item);
    }

    // ... IEnumerable<T>, ICollection<T> and IList<T> members 

}

В качестве альтернативы вы можете непосредственно получить список из списка и перезаписать методы добавления и удаления (в основном все методы, изменяющие элементы списка) и соответственно обновить кеш.

Если такой подход действительно зависит от вашего сценария. IT определенно, если у вас очень большой список, редко обновляется, и вам нужно часто получать максимум. В противном случае перейдите к уже предложенным решениям, потому что они намного проще.

Ответ 3

В Enumerable есть функция Max, которая сделает это.

Рассматривая реализацию целочисленного метода с помощью Reflector, этот метод проходит через каждый элемент в источнике IEnumerable и сравнивает его с что ранее было самым высоким значением.

Ответ 4

genericlist.Remove(genericlist.Max)