簡體   English   中英

根據LINQ中一個值的最小值或最大值進行選擇

[英]Selecting according to a Min or Max on one value in LINQ

這等效於相關子查詢,在該子查詢中,您需要具有最大X或最小X(而不是最大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一樣好?

您可以使用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中執行此操作的好方法。 什么你可以是使用MinBy()MoreLINQ

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM