精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

亚洲男女自偷自拍| 婷婷成人在线| 亚洲一二三专区| 精品国产一区二区三区日日嗨| 毛片毛片女人毛片毛片| 欧洲毛片在线视频免费观看| 884aa四虎影成人精品一区| 久久久久久久久久久综合| 日本一区视频| 九九热在线视频观看这里只有精品 | 成人一级生活片| 少妇性bbb搡bbb爽爽爽欧美| 免费av成人在线| 欧美国产日韩二区| 国产精品理论在线| 国产成人精品亚洲线观看| 欧美在线免费播放| 性一交一乱一伧国产女士spa| 国产专区在线播放| 国产91丝袜在线18| 国产精品日韩电影| 日韩乱码一区二区| 水蜜桃久久夜色精品一区| 亚洲国产精彩中文乱码av在线播放 | 极品日韩av| 日韩中文字幕在线观看| 日韩中文字幕电影| 北条麻妃一区二区三区在线观看| 欧美性大战久久久久久久蜜臀 | 性欧美1819sex性高清大胸| 91在线观看视频| 147欧美人体大胆444| 波多野结衣一本一道| 亚洲韩日在线| 九色91av视频| 老司机精品免费视频| 一区二区小说| 亚洲激情第一页| 久久久久无码精品| 欧美三级电影网址| 欧美色网站导航| 国产免费一区二区三区视频| 色yeye免费人成网站在线观看| 国产精品人成在线观看免费| 欧美精品尤物在线| 天天干天天做天天操| 久久精品国产在热久久| 国产成人精品久久久| 精品欧美一区二区三区免费观看 | 日本午夜激情视频| 免费在线国产视频| 亚洲精品五月天| 国产精品美女在线播放| 欧美a免费在线| 国产欧美日韩精品一区| 欧洲精品一区色| 国内av一区二区三区| 99re免费视频精品全部| 国产一区二区不卡视频| 亚洲经典一区二区| 大白屁股一区二区视频| 国产精品二区三区| 蜜臀久久精品久久久久| 成人免费视频国产在线观看| 超碰97国产在线| 色婷婷av一区二区三区之e本道| 成人午夜激情影院| 国产一区二区三区四区hd | 亚洲人成五月天| 在线观看福利片| 加勒比久久综合| 色伦专区97中文字幕| 日本裸体美女视频| 亚洲v在线看| 欧美日本啪啪无遮挡网站| 麻豆一区二区三区精品视频| 在线成人欧美| 欧洲亚洲免费在线| 欧美国产一级片| 激情综合色综合久久综合| 亚洲资源在线看| 蜜桃av中文字幕| www一区二区| 亚洲永久一区二区三区在线| 国产调教视频在线观看| 亚洲一区二区av在线| 日韩中文字幕三区| 福利精品一区| 欧美精品一区二| 97超碰在线免费观看| 日韩久久综合| 色综合久久88| 久久久久在线视频| 狠狠色综合日日| 国产美女在线精品免费观看| 国产女主播在线直播| 日韩毛片在线免费观看| 91丨porny丨探花| 日韩一级特黄| 欧美xxx久久| 成人免费无遮挡无码黄漫视频| 三上亚洲一区二区| 91精品国产91| 国产精品久久久久久久久久久久久久久久久久 | 亚洲另类第一页| 精品自拍偷拍| 日韩视频在线免费观看| 激情五月色婷婷| 久久99精品国产麻豆婷婷| 国产一区二区视频在线免费观看| 9色在线观看| 精品欧美aⅴ在线网站| 亚洲美女性囗交| 妖精视频一区二区三区| 久久的精品视频| 亚洲成人第一网站| 国产**成人网毛片九色| 亚洲国产日韩综合一区| 2020国产在线| 欧美一区二区三区四区在线观看| 蜜桃传媒一区二区亚洲av| 激情综合激情| 91成人免费在线观看| 91在线免费看| 91久久精品网| 三上悠亚ssⅰn939无码播放| 黄色亚洲精品| 97欧洲一区二区精品免费| 最新电影电视剧在线观看免费观看 | 亚洲精品久久久久久一区二区| 成人女同在线观看| 欧美一区二区三区免费在线看 | 超碰成人久久| 欧美一区二区三区…… | 黄色片视频网站| 国产麻豆视频精品| 一区二区三区视频在线播放| 456亚洲精品成人影院| 亚洲精品国精品久久99热一| 久久精品国产亚洲av无码娇色| 国产一区日韩二区欧美三区| 伊人色综合影院| 国产精品.xx视频.xxtv| 亚洲最新视频在线| 成年人视频免费| 久久久精品国产99久久精品芒果| 日韩avxxx| 秋霞蜜臀av久久电影网免费| 韩日欧美一区二区| 天天操天天干天天爽| 亚洲成年人影院| 艳妇乳肉豪妇荡乳xxx| 国内久久视频| 国产精品伊人日日| 国产h片在线观看| 亚洲精品国产综合区久久久久久久| 国产精品美女毛片真酒店| 粉嫩欧美一区二区三区高清影视| 久久亚洲国产成人精品无码区| 亚洲精品成a人ⅴ香蕉片| 久久精品视频播放| 国产又粗又猛又色又| 亚洲欧美另类图片小说| 午夜免费视频网站| 激情视频一区二区三区| 精品国产乱码久久久久久蜜柚| 国产精品一二三产区| 欧美mv日韩mv| 五月天综合激情| 欧美国产在线观看| 三区视频在线观看| 欧美性色综合| 麻豆一区区三区四区产品精品蜜桃| 成人黄色免费短视频| 日韩综合中文字幕| 亚洲精品国产av| 欧美视频13p| 亚洲色图欧美色| 国产乱人伦偷精品视频免下载 | 日日夜夜精品免费视频| 亚洲啪啪av| 亚洲小说春色综合另类电影| 欧美在线激情视频| 婷婷视频在线| 精品国产乱码久久| 成年人晚上看的视频| 亚洲另类中文字| 中文字幕一区二区人妻在线不卡| 日本欧洲一区二区| 久久人妻无码一区二区| 婷婷成人在线| 91免费精品国偷自产在线| 久久青草伊人| 久久夜色精品亚洲噜噜国产mv| 天天操天天干天天爽| 欧美日韩一区三区四区| 精品无码人妻一区二区三区品| 国产午夜精品久久久久久免费视| 中文字幕乱妇无码av在线| 香蕉久久夜色精品| 国内自拍中文字幕| 欧美日韩国产传媒| 俄罗斯精品一区二区| 2019年精品视频自拍| 久久久久成人网| 自拍视频在线| 亚洲福利小视频| 91精品国产乱码久久久久| 精品福利在线视频| 国产精品视频一区二区三 | 免费h视频在线观看| 最新国产精品拍自在线播放| 香蕉av在线播放| 日韩一区二区高清| 中文字幕一区二区三区免费看| 亚洲观看高清完整版在线观看| 少妇视频一区二区| 久久亚洲一区二区三区明星换脸| 手机看片国产精品| 日韩精彩视频在线观看| 男女超爽视频免费播放| 欧美在线黄色| 在线观看日韩片| 激情五月综合| 欧美日韩一区二区三| eeuss鲁片一区二区三区| 成人精品一区二区三区电影免费| 亚洲性受xxx喷奶水| 久久久视频免费观看| 精品美女在线观看视频在线观看| 亚洲人成在线观看网站高清| 天堂av中文字幕| 精品国产123| 亚洲AV无码一区二区三区少妇| 884aa四虎影成人精品一区| 在线观看国产小视频| 欧美吻胸吃奶大尺度电影| 国产免费av一区| 欧美午夜精品久久久久久久| 日韩精品一卡二卡| 性欧美大战久久久久久久久| 国产亚洲欧美久久久久| 亚洲最新视频在线观看| 欧美三级小视频| 亚洲精品视频在线观看免费| 午夜国产福利一区二区| 亚洲免费在线视频| 91嫩草|国产丨精品入口| 亚洲天天做日日做天天谢日日欢| 国产精品夜夜夜爽阿娇| 国产精品女主播在线观看| 老头老太做爰xxx视频| 国产欧美一区二区精品性色 | 丰满熟妇乱又伦| 日韩免费福利电影在线观看| 亚洲成a人片77777精品| 精品久久久久一区| 秋霞av鲁丝片一区二区| 亚洲国产美女精品久久久久∴| 人妻偷人精品一区二区三区| 亚洲国产一区二区三区在线观看| 五月婷婷免费视频| 亚洲欧美另类人妖| 超碰国产在线观看| 久久午夜a级毛片| 黄污视频在线观看| 欧美又大又粗又长| 国产成人免费9x9x人网站视频| 国产精品自产拍在线观| 91精品麻豆| 国产高清自拍99| 香蕉国产成人午夜av影院| 日韩精品极品视频在线观看免费| 超碰成人久久| 久久人妻无码一区二区| 免费日韩视频| 国产又粗又长又大的视频| 国产一区二区电影| 国产黑丝一区二区| 国产欧美1区2区3区| 波多野结衣亚洲一区二区| 天天av天天翘天天综合网| 亚洲大尺度在线观看| 91麻豆精品国产91| 亚欧在线观看视频| 这里只有精品丝袜| 国内在线免费视频| 国产精品高清在线观看| 欧美视频二区欧美影视| 久久精品国产精品青草色艺| 青青草成人影院| 欧美久久在线观看| 日本在线播放一区二区三区| 人妻少妇偷人精品久久久任期| 91片在线免费观看| 538精品在线视频| 色综合色综合色综合 | 亚洲承认视频| 91丨九色丨国产| 国产一区二区三区四区| 美女黄色免费看| 麻豆国产91在线播放| 中文字幕在线永久| ㊣最新国产の精品bt伙计久久| 国产成人精品片| 51精品久久久久久久蜜臀| 男人天堂综合| 久久久久久噜噜噜久久久精品| 视频精品导航| 久久精品人成| 狠狠综合久久| 亚洲xxx在线观看| 91色乱码一区二区三区| 欧美国产在线看| 欧美日韩国产免费| 韩国福利在线| 91av在线免费观看视频| 亚洲国产欧美国产第一区| 亚洲巨乳在线观看| 老鸭窝91久久精品色噜噜导演| 中文字幕人妻无码系列第三区| 中文字幕视频一区| 久久精品视频2| 日韩精品极品毛片系列视频| 婷婷色在线播放| 91视频国产一区| 成人久久久久| 国产嫩草在线观看| 久久精品在线观看| 成人午夜淫片100集| 精品国产亚洲在线| 色呦呦在线免费观看| 91久久精品在线| 99久久99久久精品国产片桃花| 男女爽爽爽视频| 国产无人区一区二区三区| 免费黄色网址在线| 精品偷拍一区二区三区在线看 | 国产精品高潮粉嫩av| 亚洲都市激情| 欧美性大战久久久久xxx| 99在线精品观看| 800av免费在线观看| 日韩精品中文字幕在线| 看黄在线观看| 欧美成人蜜桃| 三级欧美在线一区| 中文字幕免费在线看线人动作大片| 色激情天天射综合网| 都市激情一区| 国产精品日韩av| 国产精品成人一区二区不卡| 亚洲欧美视频二区| 中文字幕亚洲精品在线观看| 亚洲一级在线播放| 久久精品中文字幕一区| 国产精品亚洲一区二区在线观看 | 国产经品一区二区| 影音先锋亚洲一区| 亚洲av网址在线| 色猫猫国产区一区二在线视频| 搞黄视频在线观看| 成人激情在线观看| 国产精品v亚洲精品v日韩精品 | 免费成人三级| 国内外成人激情视频| 欧美经典一区二区| 国产乱人乱偷精品视频a人人澡 | 天天干中文字幕| 精品福利在线导航| 日韩av中字| 黑人巨大国产9丨视频| 国产高清久久久| 久久免费激情视频| 色系列之999| 99精品国产一区二区三区2021 | 丝袜美腿一区| 在线观看成人av| 成人性色生活片免费看爆迷你毛片| 青青草成人av| zzijzzij亚洲日本成熟少妇| 99精品在免费线中文字幕网站一区 | 国产精品一区二区三区四区五区| 久久成人免费| 欧美特黄一级片| 精品调教chinesegay| 中文字幕日韩亚洲| 黄页网站大全在线观看| 国产精品久久久久影视| 亚洲h视频在线观看| 国产成人精品久久久| 欧美日韩网址| 人妻精品久久久久中文| 日韩午夜av电影| 日本高清不卡一区二区三区视频 | 大胸美女被爆操| 精品乱人伦小说| 不卡亚洲精品| 精品少妇一区二区三区在线| 亚洲欧洲精品一区二区三区不卡|