一个班轮,以获得列表中最大的东西

时间:2014-03-12 13:24:16

标签: c# algorithm

我在网上搜索并且无法确定是否存在。我不知道这是一个好问题,但我还是会尝试。

在c#中检索列表中最大的内容的oneline算法是什么。

改变这样的事情:

int currentRow = 0;
  foreach (CustomField cf in fieldList)
    if (cf.Row > currentRow)
      currentRow = cf.Row;

在这里,Row是Type int。 提前谢谢

2 个答案:

答案 0 :(得分:6)

使用Linq(Enumerable.Max):

int currentRow = fieldList.Max(cf => cf.Row);

注意:源序列不应为空。如果序列可以为空,并且您希望将某个默认值设置为max(即样本中的0),则项目序列并使用Enumerable.DefaultIfEmpty

int currentRow = fieldList.Select(cf => cf.Row).DefaultIfEmpty(0).Max();

答案 1 :(得分:0)

此外,如果您希望元素具有某个属性的最大值(例如,总销售额最大的销售人员),而不仅仅是最大值本身,

public static TEntity MaxBy<TEntity, TKey>(
        this IEnumerable<TEntity> source, 
        Func<TEntity, TKey> selector) where TEntity : class
{
    if (source == null || !source.Any())
        return default(TEntity);
    return source.OrderByDescending(selector)
                .FirstOrDefault();
} 

用法如下:

List<Salesperson> allSalespeeps = GetSalespeople();
Salesperson winner = allSalespeeps.MaxBy(s => s.TotalSales);