[C#] LINQ之LookUp

聲明:本文爲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 中的第五種用法。

相關文章
相關標籤/搜索