精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

C#擴展方法之Enumerable.Aggregate分析

開發 后端
本文介紹C#擴展方法Enumerable.Aggregate的使用。Aggregate是Enumerable類的第一個方法,但確是Enumerable里面相對復雜的方法。

Enumerable.Aggregate 擴展方法在System.Linq命名空間中,是Enumerable類的***個方法(按字母順序排名),但確是Enumerable里面相對復雜的方法。

MSDN對這個C#擴展方法的說明是:對序列應用累加器函數。備注中還有一些說明,大意是這個方法比較復雜,一般情況下用Sum、Max、Min、Average就可以了。

看看下面的代碼,有了Sum,誰還會用Aggregate呢!

  1. public static void Test1()  
  2. {  
  3.     int[] nums = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};  
  4.  
  5.     int sum1 = nums.Sum();  
  6.     int sum2 = nums.Aggregate((i,j)=>i+j);  
  7. }  

同是求和,Sum不再需要額外參數,而Aggregate確還要將一個lambda作為參數。因為用起來麻煩,操作太低級,Aggregate漸漸被大多人忽視了...

實際上Aggregate因為“低級”,功能確是很強大的,通過它可以簡化很多聚合運算。

首先來看對Aggregate組裝字符串的問題:

  1. public static void Test2()  
  2. {  
  3.     string[] words = new string[] { "Able""was""I""ere""I""saw""Elba"};  
  4.     string s = words.Aggregate((a, n) => a + " " + n);  
  5.     Console.WriteLine(s);  

輸出結果是:Able was I ere I saw Elba (注:出自《大國崛起》,狄娜***講述了拿破侖一句經典)。

當然考慮性能的話還是用StringBuilder吧,這里主要介紹用法。這個Sum做不到吧!

Aggregate還可以將所有字符串倒序累加,配合String.Reverse擴展可以實現整個句子的倒序輸出:

  1. public static void Test3()  
  2. {  
  3.     string[] words = new string[] { "Able""was""I""ere""I""saw""Elba"};  
  4.     string normal = words.Aggregate((a, n) => a + " " + n);  
  5.     string reverse = words.Aggregate((a, n) => n.Reverse() + " " + a);  
  6.  
  7.     Console.WriteLine("正常:" + normal);  
  8.     Console.WriteLine("倒置:" + reverse);  
  9. }  
  10. // 倒置字符串,輸入"abcd123",返回"321dcba"  
  11. public static string Reverse(this string value)  
  12. {  
  13.     char[] input = value.ToCharArray();  
  14.     char[] output = new char[value.Length];  
  15.     for (int i = 0; i < input.Length; i++)  
  16.         output[input.Length - 1 - i] = input[i];  
  17.     return new string(output);  
  18. }  

看下面,輸出結果好像不太對:

輸出結果 

怎么中間的都一樣,兩的單詞首尾字母大小寫發生轉換了呢?!

仔細看看吧,不是算法有問題,是輸入“有問題”。搜索一下“Able was I ere I saw Elba”,這可是很有名的英文句子噢!

Enumerable.Aggregate這個C#擴展方法還可以實現異或(^)操作:

  1. public static void Test4()  
  2. {  
  3.     byte[] data = new byte[] { 0x31, 0x32, 0x33, 0x34, 0x35 };  
  4.     byte checkSum = data.Aggregate((a, n) => (byte)(a ^ n));  
  5. }  

對經常作串口通信的朋友比較實用。

看來Aggregate也是比較“簡單易用”的,深入一步來看看它是怎么實現的吧,使用Reflector,反編譯一下System.Core.dll。

以下代碼取自反編譯結果,為了演示刪除了其中的空值判斷代碼:

  1. public static TSource Aggregate(this IEnumerable source, Func func)  
  2.         {  
  3.             using (IEnumerator enumerator = source.GetEnumerator())  
  4.             {  
  5.                 enumerator.MoveNext();  
  6.                 TSource current = enumerator.Current;  
  7.                 while (enumerator.MoveNext())  
  8.                     current = func(current, enumerator.Current);  
  9.                 return current;  
  10.             }  
  11.         } 

也很簡單吧,就是一個循環!前面lambda表達式中參數a, n 分別對應current, enumerator.Current,對照一下,還是很好理解的。

現在我們想求整數數組中位置為偶數的數的和(間隔求和),可以用Where配合Sum:

  1. public static void Test5()  
  2. {  
  3.     int[] nums = new int[] { 10, 20, 30, 40, 50 };  
  4.     int sum1 = nums.Where((n, i) => i % 2 == 0).Sum();//10 + 30 + 50  

這個Where擴展設計的很好,它不但能帶出某項的值“n”,還能帶出項的位置“i”。

Aggregate可不行!我們來改進一下:

  1. //改進的Aggerate擴展(示例代碼,實際使用請添加空值檢查)  
  2. public static TSource Aggregate(this IEnumerable source, Funcint, TSource> func)  
  3. {  
  4.     int index = 0;  
  5.     using (IEnumerator enumerator = source.GetEnumerator())  
  6.     {  
  7.         enumerator.MoveNext();  
  8.         index++;  
  9.         TSource current = enumerator.Current;  
  10.         while (enumerator.MoveNext())  
  11.             current = func(current, enumerator.Current, index++);  
  12.         return current;  
  13.     }  

改進后的Aggregate更加強大,前面的求偶數位置數和的算法可以寫成下面的樣子:

  1. public static void Test6()  
  2. {  
  3.     int[] nums = new int[] { 10, 20, 30, 40, 50 };  
  4.     int sum2 = nums.Aggregate((a, c, i) => a + i%2 == 0 ? c : 0 );//10 + 30 + 50  

可能不夠簡潔,但它一個函數代替了Where和Sum。所在位置“i“的引入給Aggregate帶來了很多新的活力,也增加了它的應用范圍!

我隨筆《使用“初中知識”實現查找重復***算法 + 最***限算法》中***提出的“最***限算法”,用上這里改進的Aggregate擴展,也可以甩開Select和Sum,更加精簡一步了:

  1. public static void Test7()  
  2. {  
  3.     //1~n放在含有n+1個元素的數組中,只有唯一的一個元素值重復,最簡算法找出重復的數  
  4.     int[] array = new int[] { 1, 3, 2, 3, 4, 5 };  
  5.     //原極限算法  
  6.     int repeatedNum1 = array.Select((i, j) => i - j).Sum();  
  7.     //***極限算法  
  8.     int repeatedNum2 = array.Aggregate((a, n, i) => a + n - i);  
  9. }  

以上就介紹了C#擴展方法之Enumerable.Aggregate。本文來自鶴沖天的博客:《c#擴展方法奇思妙用高級篇二:Aggregate擴展其改進》。

【編輯推薦】

  1. 有關繼承與擴展方法之比較:ObservableCollection
  2. C#繼承知識詳解
  3. 淺談C#如何實現多繼承
  4. .NET 3.5擴展方法點評:優點與問題
  5. 淺析C#擴展方法
責任編輯:yangsai 來源: 鶴沖天
相關推薦

2009-08-10 17:36:17

C#擴展方法

2009-08-27 18:04:01

c#擴展方法string

2009-09-01 11:04:59

C#調用擴展方法

2009-08-31 14:45:10

C#擴展方法

2009-08-27 16:24:48

擴展方法C# 3.0新特性

2009-08-26 15:53:48

C#擴展方法

2009-08-27 09:27:49

C#擴展方法

2009-08-18 14:14:45

C#擴展方法性能測試

2012-10-31 17:37:48

2009-08-05 15:04:14

C# dll注入

2009-04-03 13:20:05

C#擴展方法調用

2009-08-18 14:36:36

C# 操作Excel

2009-09-01 11:19:47

C# 3.0擴展重載抉

2009-08-25 17:59:49

C#入門

2009-09-17 11:29:50

Linq擴展方法

2009-08-26 09:50:08

C# GreetPeo

2009-08-26 17:16:22

C# CheckSta

2009-08-17 17:40:53

C# GetAllCu

2009-09-02 17:08:30

C#語言開發Windo

2009-08-28 14:25:57

C# byte數組
點贊
收藏

51CTO技術棧公眾號

成人免费看片网站| 中文字幕亚洲在线| 欧美视频在线观看网站| 同心难改在线观看| 丝袜美腿一区二区三区| 亚洲欧洲美洲在线综合| 超碰成人在线播放| 国产99re66在线视频| 久久综合色播五月| 91亚洲精品在线| 精品美女久久久久| 成人高清av| 精品免费视频一区二区| 91蝌蚪视频在线观看| 伊人福利在线| 国产嫩草影院久久久久| 翡翠波斯猫1977年美国| 一级久久久久久| 国自产拍偷拍福利精品免费一| 亚洲人在线视频| 日本精品一二三| 亚洲精品aa| 一本大道久久a久久综合| 在线观看污视频| 999国产在线视频| www.亚洲激情.com| 91香蕉亚洲精品| 欧美日韩a v| 亚洲视频精品| 久久亚洲精品中文字幕冲田杏梨 | 久久久国产精品黄毛片| 九色精品国产蝌蚪| 亚洲第一网中文字幕| 中文字幕12页| 国产精品伦一区二区| 富二代精品短视频| 成人网站免费观看入口| 麻豆影视国产在线观看| 国产丝袜欧美中文另类| 久久精品午夜一区二区福利| 不卡的日韩av| 国产久卡久卡久卡久卡视频精品| 国产精品嫩草影院久久久| 综合网在线观看| 亚洲久色影视| 午夜精品一区二区三区在线视频 | 亚洲麻豆一区| 久久久久久久久国产精品| 国产精品视频一区二区三 | 在线观看xxxx| 免费不卡在线视频| 国产精品视频免费在线观看| 精品黑人一区二区三区| 快she精品国产999| 国产成人av网| 亚洲午夜无码久久久久| 日韩电影在线观看电影| 国产精品69av| 国产情侣免费视频| 蜜桃av一区二区| 国产精品成人一区二区三区吃奶| 中文字幕精品视频在线观看| 日韩成人精品视频| 国产美女主播一区| 国产精品高潮呻吟av| 国产一区二区三区在线看麻豆| 国内一区二区在线| 在线播放欧美女士性生活| 国产一伦一伦一伦| 激情综合婷婷| 亚洲精品一区二区三区香蕉| 日本五十肥熟交尾| 亚洲人成精品久久久| 亚洲丝袜av一区| 刘亦菲国产毛片bd| 欧美在线亚洲综合一区| 欧美精品videos另类日本| 日韩av在线天堂| 老**午夜毛片一区二区三区 | 天堂а√在线中文在线| 免费看电影在线| 日韩欧美成人精品| 视频在线观看免费高清| 日韩激情欧美| 亚洲乱码国产乱码精品精天堂| 日本少妇xxxxx| 888久久久| 18一19gay欧美视频网站| 青娱乐在线免费视频| 久久99久久99| 精品国产一区二区三区四区精华 | 日本亚洲精品在线观看| 一级特黄色大片| 成人av在线看| 亚洲视频精品一区| 久久久123| 欧美色倩网站大全免费| 在线播放av网址| 日韩在线看片| 97国产一区二区精品久久呦 | 成人做爰视频www网站小优视频| 欧美女孩性生活视频| 影音先锋资源av| 日韩精品久久| 2019最新中文字幕| 99国产精品一区二区三区| 91美女精品福利| 潘金莲一级淫片aaaaaa播放1| 欲香欲色天天天综合和网| 精品福利网址导航| 黑人巨大精品欧美一区二区免费| 亚洲欧洲日本精品| 日韩激情毛片| 久久久久99精品久久久久| 丁香六月婷婷综合| 懂色av一区二区夜夜嗨| 亚洲精品国产精品国自产观看| 高潮在线视频| 欧美r级在线观看| 欧美美女性生活视频| 久久福利精品| 国产精品免费视频一区二区| 国产精品va在线观看视色| 91极品美女在线| 久久精品女同亚洲女同13| 影视一区二区| 91中文字幕在线| 97在线观看免费观看高清| 精品国产999| 亚洲精品激情视频| 国产精品大片免费观看| 91香蕉电影院| 成人福利网站| 欧美高清dvd| 在线观看天堂av| 日韩黄色片在线观看| 六月婷婷久久| 亚洲男人av| 亚洲精品国产精品自产a区红杏吧| 亚洲欧洲成视频免费观看| 国产精品成人免费一区久久羞羞| 99久久久久| 国产女精品视频网站免费| 黄色视屏网站在线免费观看| 日韩欧美aaa| 精品无码一区二区三区| 亚洲永久免费精品| 久久久精品动漫| 日本蜜桃在线观看视频| 日韩国产精品一区| 美女又爽又黄免费视频| 99久久婷婷国产| 国产午夜伦鲁鲁| 亚洲大片精品免费| 日韩免费观看高清| 国产日本在线视频| 欧美视频中文字幕| 欧美肥妇bbwbbw| 国产在线播放一区三区四| 欧美日韩一区二区三区电影| 中文无码日韩欧| 97久久久久久| 九色网友自拍视频手机在线| 欧美视频精品在线| 神马久久精品综合| 懂色av中文一区二区三区| 免费成人午夜视频| 精品国产一区一区二区三亚瑟| 国产精品男女猛烈高潮激情| 老司机福利在线视频| 日韩美女在线视频| wwwxxx亚洲| av成人在线观看| 一区二区视频在线看| 中文字幕人妻熟女在线| 国产午夜精品一区二区三区欧美| 日本免费高清一区| 成年永久一区二区三区免费视频| 欧美尺度大的性做爰视频| 日本xxxxwww| 欧美三级三级三级爽爽爽| 成人在线观看小视频| 成人h动漫精品一区二区| 一本久道综合色婷婷五月| 91tv精品福利国产在线观看| 国产精品一区二区你懂得| 日韩电影免费观| 欧美高清视频免费观看| 欧美性孕妇孕交| 欧美一区二区二区| 亚洲免费黄色网址| 亚洲情趣在线观看| 国产美女精品久久| 国产一区二区0| 十八禁视频网站在线观看| 女人色偷偷aa久久天堂| 人禽交欧美网站免费| 欧美影院在线| 国产精品久久久久久网站| 丁香花电影在线观看完整版| 欲色天天网综合久久| 日本精品一二区| 欧美电影在线免费观看| 日韩手机在线视频| 亚洲精品中文在线影院| 欧美 日韩 成人| 成人污视频在线观看| av免费一区二区| 老司机精品视频网站| 一本久道高清无码视频| 欧美freesextv| 欧美大香线蕉线伊人久久| 91成人噜噜噜在线播放| 国产一区视频在线播放| 性欧美videohd高精| 668精品在线视频| 免费在线观看的电影网站| 久久精品国产欧美激情| 韩国免费在线视频| 精品亚洲国产成av人片传媒| 精品人妻伦一二三区久久| 欧美日韩欧美一区二区| 久久精品国产亚洲av麻豆蜜芽| 天天亚洲美女在线视频| 日本特黄特色aaa大片免费| 亚洲日本一区二区三区| 五月婷婷六月香| 国产婷婷一区二区| 国产精品亚洲无码| 97aⅴ精品视频一二三区| 无码人妻丰满熟妇区毛片蜜桃精品 | 亚洲人成777| 国产成人欧美在线观看| 色综合亚洲图丝熟| 97国产一区二区精品久久呦| 俺来也官网欧美久久精品| 美日韩丰满少妇在线观看| 欧美成人hd| 日韩亚洲欧美中文高清在线| 成年在线电影| 中文字幕久热精品视频在线| 精品视频一二区| 亚洲性日韩精品一区二区| 亚洲三级中文字幕| 国产丝袜一区二区三区免费视频| 色欲久久久天天天综合网| 亚洲成人网在线观看| 四虎永久在线精品免费网址| 亚洲黄页网在线观看| 亚洲aaa在线观看| 亚洲性线免费观看视频成熟| 电影av一区| 中文字幕精品—区二区| 午夜在线播放| 另类少妇人与禽zozz0性伦| 18+视频在线观看| 欧美激情精品久久久久久蜜臀| 2020av在线| 国产999精品| 成人免费在线观看视频| 成人网址在线观看| 亚洲小说春色综合另类电影| 国产一区福利视频| 夜夜躁狠狠躁日日躁2021日韩| 天天操天天色综合| 中文字幕人妻熟女人妻a片| 丁香激情综合国产| 不卡一区二区在线观看| 亚洲国产高清不卡| 五月天av网站| 欧美日韩国产黄| 中文天堂在线播放| 日韩欧美一二区| 午夜激情小视频| 色婷婷综合成人| 精精国产xxxx视频在线中文版| 97精品视频在线播放| 99久久伊人| 国产66精品久久久久999小说| 天堂av一区二区三区在线播放| 色一情一区二区三区四区| 你懂的成人av| 丁香啪啪综合成人亚洲| 久久av资源网| 国产精品福利导航| 国产精品护士白丝一区av| 国产无精乱码一区二区三区| 欧美性受xxxx黑人xyx| 国产特级黄色片| 亚洲午夜av电影| 欧美日韩经典丝袜| 久久免费少妇高潮久久精品99| 最新日韩一区| 国语精品中文字幕| 国产精品成人a在线观看| 欧美乱大交xxxxx潮喷l头像| 久久精品国产99国产| 中文成人无字幕乱码精品区| 国产精品乱人伦中文| 成年人午夜视频| 91精品国产一区二区三区香蕉| 免费动漫网站在线观看| 欧美激情xxxxx| 中韩乱幕日产无线码一区| 国产视色精品亚洲一区二区| 九色91在线| 午夜精品久久久久久久久| 日本道在线观看| 欧美一区二区三区免费在线看| 可以在线观看的黄色| 欧美精品九九久久| 99久久久成人国产精品| 欧美日本亚洲| 亚洲伦理精品| 中国特级黄色片| 亚洲三级电影网站| 久久这里只有精品9| 亚洲剧情一区二区| 高清在线视频不卡| 成人黄动漫网站免费| 久久日文中文字幕乱码| 成人在线激情网| 99精品欧美一区二区三区小说| 欧美成人aaa片一区国产精品| 欧美无砖砖区免费| 国产综合视频一区二区三区免费| 97碰在线观看| 1204国产成人精品视频| 超碰在线免费观看97| 日本成人在线一区| 日本性高潮视频| 色又黄又爽网站www久久| 香蕉视频成人在线| 午夜精品一区二区三区视频免费看 | 国产在线观看91精品一区| 精品一区亚洲| 超碰97人人射妻| 久久精品免费在线观看| 波多野结衣 久久| 亚洲人在线观看| 欧美xnxx| 一级特黄录像免费播放全99| 免费在线观看成人| 国产又色又爽又高潮免费| 欧美三级日本三级少妇99| 99青草视频在线播放视| 国产精品一香蕉国产线看观看| 日韩精品一区二区久久| 国产一区二区在线免费播放| 国产精品午夜免费| 国产日韩欧美一区二区东京热| 乱亲女秽乱长久久久| 日本一区二区三区视频在线看| 久久久久久久久网| 成人av网站大全| 日产精品久久久久| 亚洲另类图片色| 精品国产黄a∨片高清在线| 一区二区三区四区欧美| 国产精品自拍网站| 亚洲一区 视频| 亚洲欧美精品一区二区| 另类专区亚洲| 亚洲一区二区免费视频软件合集 | 成人无码av片在线观看| 欧美视频第二页| av在线免费网站| 精品欧美国产| 美女视频网站黄色亚洲| 成人观看免费视频| 日韩精品一区二区视频| 91精品美女| 免费看黄色a级片| 91亚洲精品久久久蜜桃网站| а中文在线天堂| 色综合色综合久久综合频道88| 老牛精品亚洲成av人片| www.99av.com| 亚洲精品水蜜桃| 欧美套图亚洲一区| 成人乱人伦精品视频在线观看| 伊人激情综合| 91精品国自产在线| 精品久久久久久久久久久久包黑料| 理论不卡电影大全神| 在线视频91| 99久久精品费精品国产一区二区| 中文在线字幕免费观| 欧美老女人性生活| 欧美精选一区二区三区| 精品国产aⅴ一区二区三区东京热 久久久久99人妻一区二区三区 | 一区二区国产日产| jiyouzz国产精品久久| 伊人网免费视频| 欧美亚洲另类激情另类| 888久久久| 亚洲第一视频区| 欧美精品一区男女天堂| 欧洲美女精品免费观看视频| 可以在线看的av网站|