日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Linq专题之提高编码效率—— 第一篇 Aggregate方法

發(fā)布時間:2025/6/15 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linq专题之提高编码效率—— 第一篇 Aggregate方法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

  我們知道linq是一個很古老的東西,大家也知道,自從用了linq,我們的foreach少了很多,但有一個現(xiàn)實就是我們在實際應(yīng)用中使用到的卻是屈指可數(shù)

的幾個方法,這個系列我會帶領(lǐng)大家看遍linq,好的,廢話不多說,先從Aggregate這個貂毛說起。

?

一:應(yīng)用場景

  前不久在寫一個項目的時候,我需要撈取營銷活動,剛好營銷活動有兩個類型,一種是普通活動,一個是觸發(fā)式活動,由于存放在兩張表中,并且撈取

之后需要做一些實體的轉(zhuǎn)存,等等計算,所以就有了類似這樣的代碼。

1 namespace ConsoleApplication1 2 { 3 class Program 4 { 5 static void Main(string[] args) 6 { 7 Dictionary<int, List<Marketing>> dic = new Dictionary<int, List<Marketing>>(); 8 9 //普通活動 10 if (!dic.ContainsKey(1)) 11 dic[1] = new List<Marketing>(); 12 dic[1].Add(new Marketing() { MarketingID = 1, MarketingName = "普通活動1" }); 13 dic[1].Add(new Marketing() { MarketingID = 1, MarketingName = "普通活動2" }); 14 15 //事件活動 16 if (!dic.ContainsKey(2)) 17 dic[2] = new List<Marketing>(); 18 dic[2].Add(new Marketing() { MarketingID = 3, MarketingName = "事件活動1" }); 19 dic[2].Add(new Marketing() { MarketingID = 4, MarketingName = "事件活動2" }); 20 } 21 } 22 23 class Marketing 24 { 25 public int MarketingID { get; set; } 26 27 public string MarketingName { get; set; } 28 } 29 }

然后我經(jīng)過一系列運算之后,又需要把字典中的key=1和key=2的數(shù)據(jù)扁平到一個list中,那么這個簡單的計算該怎么做到呢???

?

普通的做法: 需要先定義一個List變量,然后一個foreach搞定。

1 List<Marketing> marketingList = new List<Marketing>(); 2 foreach (var key in dic.Keys) 3 { 4 marketingList.AddRange(dic[key]); 5 }

?如果你不會用Aggregate的話,你會覺得這個方法已經(jīng)非常極致了。。。而事實呢???我們應(yīng)該還有更牛逼的做法!!!

?

牛逼的做法:

1 var marketingList = dic.Keys.Aggregate(Enumerable.Empty<Marketing>(), (total, next) => 2 { 3 return total.Union(dic[next]); 4 });

有沒有看到,用lamda這種寫法多么的連貫,沒有第一種寫法上的斷層,當(dāng)然很多框架上都有Aggregate這種聚合計算,比如mongodb中同樣也有

Aggregate,下面我們用ILSpy看看Aggregate這種魔法化的代碼是怎么實現(xiàn)的。

?

二:探究源碼

? ?當(dāng)你看到源碼的時候,是不是有一種亮瞎眼的感覺,所謂的Aggregate在內(nèi)部其實也僅僅是“普通做法”一模一樣的源代碼。。。而Aggregate僅僅做的

是一層代碼封裝,這樣也好,提高了我們開發(fā)效率,對吧,如下圖:

?

從圖中我們看到了Aggregate有三種重載方法,本篇剛好用到的是第二種重載,第一種看起來就更簡單了,對吧,更何況我們有ILSpy,歡迎大家自行

探索,本篇就說到這里了,感謝支持~~~

?

————————————————————————————————————————————————————————————

————————————————————————————————————————————————————————————

友情提示:如果不喜歡看文章,可以移步本系列的?完整版Linq視頻教程?【一包煙的錢哦】

————————————————————————————————————————————————————————————

————————————————————————————————————————————————————————————

《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的Linq专题之提高编码效率—— 第一篇 Aggregate方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。