1. 程式人生 > >[C#] LINQ之LookUp

[C#] LINQ之LookUp

for sele ride () sel alt 用兩個 per over

聲明:本文為www.cnc6.cn原創,轉載時請註明出處,謝謝!

本文作者文采欠佳,文字表達等方面不是很好,但實際的代碼例子是非常實用的,請作參考。

一、先準備要使用的類:

1、Person類:

    class Person
    {
        public string Name { set; get; }
        public int Age { set; get; }
        public string Gender { set; get; }
        public override string ToString() => Name;
    }

2、準備要使用的List,用於查找(ToLookUp,類似分組):

        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", } };

3、ToLookUp與GroupBy的功能基本一樣,但ToLookUp沒有GroupBy那樣得延遲執行機制,它是立即執行的,且重載只有4個,而GroupBy卻有8個之多。

二、第一種用法:

public static ILookup<TKey, TSource> ToLookup<TSource, TKey>(this
IEnumerable<TSource> source, Func<TSource, TKey> keySelector);

官方釋義:根據指定的鍵選擇器函數,從IEnumerable<TSource>創建一個 ILookup<TKey, TSource>。

其實,ToLookUp具有GroupBy一樣的分組功能,我們要LookUp的集合為source,集合內每個元素的類型為TSource,這裏第一個參數keySelector的類型為Func<TSource, TKey>,用於將TSource元素按照由此委托返回的類型TKey進行LookUp,結果為一個已分好組的集合(集合中的集合)。

編寫客戶端試驗代碼如下:

        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的標識。

輸出結果如下:

技術分享圖片

第二種用法~第四種用法待續。。。

[C#] LINQ之LookUp