標籤:des style blog http color io os 使用 ar
.net 裡面集合操作極為方便,尤其是實現了IEnumerable介面的集合,一直在使用,系統的研究一下集合的操作也是極好的。
| 類型 |
操作符名稱 |
| 投影操作符 |
Select,SelectMany |
| 限制操作符 |
Where |
| 排序操作符 |
OrderBy,OrderByDescending,ThenBy,ThenByDescending,Reverse |
| 聯結操作符 |
Join,GroupJoin |
| 分組操作符 |
GroupBy |
| 串聯操作符 |
Concat |
| 彙總操作符 |
Aggregate,Average,Count,LongCount,Max,Min,Sum |
| 集合操作符 |
Distinct,Union,Intersect,Except |
| 產生操作符 |
Empty,Range,Repeat |
| 轉換操作符 |
AsEnumerable,Cast,OfType,ToArray,ToDictionary,ToList,ToLookup |
| 元素操作符 |
DefaultIfEmpty,ElementAt,ElementAtOrDefault,First,Last,FirstOrDefault, LastOrDefault,Single,SingleOrDefault |
| 相等操作符 |
SequenceEqual |
| 量詞操作符 |
All,Any,Contains |
| 分割操作符 |
Skip,SkipWhile,Take,TakeWhile |
投影操作符
投影操作就是我們常用的Select和SelectMany,剛接觸的話是很容易搞混的。
Select是把要遍曆的集合IEnumerable<T>逐一遍曆,每次返回一個T,合并之後直接返回一個IEnumerable<T>
SelectMany則把原有的集合IEnumerable<T>每個元素遍曆一遍,每次返回一個IEnumerable<T>,把這些IEnumerable<T>的“T”合并之後整體返回一個IEnumerable<T>
看下MSN的圖:地址
測試代碼:
List<Bouquet> bouquets = new List<Bouquet>() { new Bouquet { Flowers = new List<string> { "sunflower", "daisy", "daffodil", "larkspur" }}, new Bouquet{ Flowers = new List<string> { "tulip", "rose", "orchid" }}, new Bouquet{ Flowers = new List<string> { "gladiolis", "lily", "snapdragon", "aster", "protea" }}, new Bouquet{ Flowers = new List<string> { "larkspur", "lilac", "iris", "dahlia" }} }; // *********** Select *********** IEnumerable<List<string>> query1 = bouquets.Select(bq => bq.Flowers); // ********* SelectMany ********* IEnumerable<string> query2 = bouquets.SelectMany(bq => bq.Flowers); Console.WriteLine("Results by using Select():"); // Note the extra foreach loop here. foreach (IEnumerable<String> collection in query1) foreach (string item in collection) Console.WriteLine(item); Console.WriteLine("\nResults by using SelectMany():"); foreach (string item in query2) Console.WriteLine(item);View Code
FCL研究-LINQ-System.Linq Enumerable