使用C#查找通用列表中的最高整数?

Mic*_*ern 10 c# .net-3.5

我有以下List<int>集合,我需要在集合中找到最高整数.它可以有任意数量的整数,我可以多次使用相同的整数值.

List<int> MyList = new List<int> { 3, 4, 6, 7, 9, 3, 4, 5, 5 };
Run Code Online (Sandbox Code Playgroud)

用于查找最高整数的最简单算法是什么?我正在使用C#和.NET 3.5框架.

Ree*_*sey 69

你可以这样做:

int max = MyList.Max();
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅Enumerable.Max.

  • 确保使用System.Linq添加; 因为Max是一种扩展方法. (15认同)

Dir*_*mar 9

如果需要经常检索最大值,可以考虑创建自己的列表类(或从List派生),它将最大项保留在缓存中.这样的类看起来像这样:

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 

}
Run Code Online (Sandbox Code Playgroud)

或者,您可以直接从List派生并覆盖Add和Remove方法(基本上所有修改列表项的方法)并相应地更新缓存.

如果这种方法真的有益,取决于您的方案.如果你有一个非常大的列表很少更新,你需要经常检索最大值.否则,请选择已建议的解决方案,因为它们更简单.

  • 您需要有一个状态,指示max当前是否有效.如果删除的项目等于最大值,则应该无效.在这种情况下,get方法需要重新扫描列表(可能使用Max扩展方法)以获得新的最大值.您也可以使用排序列表,但还有其他价格. (3认同)

Tim*_*ter 6

Enumerable有一个Max函数可以执行此操作.

查看使用Reflector 的整数特定方法的实现,该方法遍历IEnumerable源中的每个元素,并将其与之前的最高值进行比较.