亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Linq:如何對集合中所有對象的屬性執行.max(),并返回最大值[的對象

Linq:如何對集合中所有對象的屬性執行.max(),并返回最大值[的對象

C#
慕標琳琳 2019-07-09 10:34:15
Linq:如何對集合中所有對象的屬性執行.max(),并返回最大值[的對象我有一個有兩個int屬性的對象列表。該列表是另一個Linq查詢的輸出。對象:public class DimensionPair  {     public int Height { get; set; }     public int Width { get; set; }}我想在列表中找到并返回其中最大的對象Height財產價值我可以設法獲得最高值的Height值,而不是對象本身。我能和Linq一起做這個嗎?多么,怎樣?
查看完整描述

3 回答

?
皈依舞

TA貢獻1851條經驗 獲得超3個贊

我們有一個可拓法才能做到這一點MoreLINQ..您可以查看那里的實現,但基本上它是迭代數據的情況,記住我們到目前為止看到的最大元素以及它在投影下產生的最大值。

在你的情況下,你會做這樣的事情:

var item = items.MaxBy(x => x.Height);

這比這里提出的任何解決方案都要好,除了Mehrdad的第二個解決方案(基本上與MaxBy):

  • 它是O(N)不像

    先前接受的答復

    ,它在每次迭代中找到最大值(使其為O(n^2)。
  • 排序解為O(N Logn)
  • 拿著

    Max

    值,然后找到帶有該值的第一個元素是O(N),但在序列上迭代兩次。在可能的情況下,您應該以單程方式使用LINQ。
  • 與聚合版本相比,閱讀和理解要簡單得多,并且每個元素只計算一次投影


查看完整回答
反對 回復 2019-07-09
?
蕭十郎

TA貢獻1815條經驗 獲得超13個贊

這需要一個排序(O(N)原木但非常簡單和靈活。另一個優勢是能夠與LINQtoSQL一起使用它:

var maxObject = list.OrderByDescending(item => item.Height).First();

注意,這具有枚舉list只重復一次。雖然這可能并不重要listList<T>在此期間,這一點并沒有改變,這可能是武斷的事。IEnumerable<T>物品。沒有什么能保證序列不會在不同的枚舉中發生變化,因此多次執行的方法可能是危險的(而且效率很低,取決于序列的性質)。然而,對于大序列,它仍然是一個不太理想的解決方案。我建議你自己寫MaxObject如果有大量的項可以在一次傳遞中完成,而不需要排序和其他任何內容,則可以手動擴展(O(N):

static class EnumerableExtensions {
    public static T MaxObject<T,U>(this IEnumerable<T> source, Func<T,U> selector)
      where U : IComparable<U> {
       if (source == null) throw new ArgumentNullException("source");
       bool first = true;
       T maxObj = default(T);
       U maxKey = default(U);
       foreach (var item in source) {
           if (first) {
                maxObj = item;
                maxKey = selector(maxObj);
                first = false;
           } else {
                U currentKey = selector(item);
                if (currentKey.CompareTo(maxKey) > 0) {
                    maxKey = currentKey;
                    maxObj = item;
                }
           }
       }
       if (first) throw new InvalidOperationException("Sequence is empty.");
       return maxObj;
    }}

并與以下內容一起使用:

var maxObject = list.MaxObject(item => item.Height);


查看完整回答
反對 回復 2019-07-09
  • 3 回答
  • 0 關注
  • 3037 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號