Ответ 1
Вы можете просто сделать:
int max = MyList.Max();
Подробнее см. Enumerable.Max.
У меня есть следующая коллекция List<int>
, и мне нужно найти наивысшее целое число в коллекции. Он может иметь произвольное число целых чисел, и я могу иметь одно и то же целочисленное значение несколько раз.
List<int> MyList = new List<int> { 3, 4, 6, 7, 9, 3, 4, 5, 5 };
Каков самый простой алгоритм для поиска наивысшего целого? Я использую С# и .NET 3.5 framework.
Вы можете просто сделать:
int max = MyList.Max();
Подробнее см. Enumerable.Max.
Если вам нужно часто получать максимальное значение, вы можете подумать о создании собственного класса списка (или получить из списка), который сохраняет максимальный элемент в кеше. Такой класс может выглядеть так:
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 определенно, если у вас очень большой список, редко обновляется, и вам нужно часто получать максимум. В противном случае перейдите к уже предложенным решениям, потому что они намного проще.
В Enumerable есть функция Max, которая сделает это.
Рассматривая реализацию целочисленного метода с помощью Reflector, этот метод проходит через каждый элемент в источнике IEnumerable и сравнивает его с что ранее было самым высоким значением.
genericlist.Remove(genericlist.Max)