根据 LINQ 中一个值的最小值或最大值进行选择

本文关键字:最小值 最大值 选择 行选 一个 LINQ 根据 | 更新日期: 2023-09-27 18:33:41

这相当于一个相关的子查询,你想要的是具有最大或最小X(而不是最大或最小X本身)的行。我只能通过排序和挑选第一项来获得它。

public static TSource PickMin<TSource, TMin>(this IEnumerable<TSource> source, Func<TSource, TMin> selector) where TMin : IComparable<TMin>
{
    return source.OrderBy(selector).FirstOrDefault();
}

这听起来并不是最有效的方法。我认为.Contains.Min的结合可以做到这一点?或者这是否与 LINQ 一样好?

根据 LINQ 中一个值的最小值或最大值进行选择

您可以使用聚合,这是O(n)的(并且在幕后公平使用,当您调用 Min()Max() 等时):

public static TSource PickMin<TSource, TMin>(this IEnumerable<TSource> source, Func<TSource, TMin> selector) where TMin : IComparable<TMin>
{
     var first = source.FirstOrDefault();
     return source.Aggregate(first, (min, current) => selector(current).CompareTo(selector(min)) < 0 ? current : min);
}

如果希望它在空集合上引发异常(而不是返回默认值),请删除第一行。

没有

直接在 LINQ 中执行此操作的好方法。你可以使用来自MoreLINQ的MinBy()