聲明:本文爲www.cnc6.cn原創,轉載時請註明出處,謝謝!html
本文做者文采欠佳,文字表達等方面不是很好,但實際的代碼例子是很是實用的,請做參考。ide
1、先準備要使用的類:函數
一、Person類:this
class Person { public string Name { set; get; } public int Age { set; get; } public string Gender { set; get; } public override string ToString() => Name; }
二、準備要使用的List,用於查找(ToLookUp,相似分組):spa
List<Person> personList = new List<Person> { new Person { Name = "P1", Age = 18, Gender = "Male" }, new Person { Name = "P2", Age = 19, Gender = "Male", }, new Person { Name = "P2", Age = 17,Gender = "Female", } };
三、ToLookUp與GroupBy的功能基本同樣,但ToLookUp沒有GroupBy那樣得延遲執行機制,它是當即執行的,且重載只有4個,而GroupBy卻有8個之多。code
2、第一種用法:htm
public static ILookup<TKey, TSource> ToLookup<TSource, TKey>(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector);
官方釋義:根據指定的鍵選擇器函數,從IEnumerable<TSource>建立一個 ILookup<TKey, TSource>。blog
其實,ToLookUp具備GroupBy同樣的分組功能,咱們要LookUp的集合爲source,集合內每一個元素的類型爲TSource,這裏第一個參數keySelector的類型爲Func<TSource, TKey>,用於將TSource元素按照由此委託返回的類型TKey進行LookUp,結果爲一個已分好組的集合(集合中的集合)。繼承
編寫客戶端試驗代碼以下:element
var lookups = personList.ToLookup(p => p.Gender); foreach(var lookup in lookups) { Console.Write($"{lookup.Key}:\t"); foreach(var person in lookup) { Console.Write($"{person.Name},{person.Age}\t"); } Console.WriteLine(); }
以上代碼指定的KeySelector是Person類的Gender屬性,所以,以上會按照Gender(性別)進行LookUp,咱們使用兩個嵌套的foreach循環將分組的內容打印到控制檯。
由於lookups返回的類型爲ILookUp<TKey,TSource>(實際繼承於IEnumerable<IGrouping<TKey,TSource>>),所以以上返回的類型爲ILookUp<string,Person>。
ILookUp<string,Person>是已經LookUp後的集合,內部集合元素爲Person,且ILookUp有一個Key屬性,類型爲string(指的是Gender屬性類型),用於LookUp的標識。
輸出結果以下:
3、第2、3、四種用法
因爲ToLookUp與GroupBy類似,所以,第2、3、四種用法請參考請參考 [C#] LINQ之GroupBy 。
public static ILookup<TKey, TSource> ToLookup<TSource, TKey>(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector, IEqualityComparer<TKey> comparer);
官方釋義:根據指定的鍵選擇器函數和鍵比較器,從IEnumerable<TSource>建立一個ILookup<TKey, TElement>。
請參考 [C#] LINQ之GroupBy 中的第二種用法。
public static ILookup<TKey, TElement> ToLookup<TSource, TKey, TElement>(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector, Func<TSource, TElement> elementSelector);
官方釋義:根據指定的鍵選擇器和元素選擇器函數,從IEnumerable<TSource>建立一個ILookup<TKey, TElement>。
請參考 [C#] LINQ之GroupBy 中的第三種用法。
public static ILookup<TKey, TElement> ToLookup<TSource, TKey, TElement>(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector, Func<TSource, TElement> elementSelector, IEqualityComparer<TKey> comparer);
官方釋義:根據指定的鍵選擇器函數、比較器和元素選擇器函數,從IEnumerable<TSource>建立一個ILookup<TKey, TElement>。
請參考 [C#] LINQ之GroupBy 中的第五種用法。