[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 中的第五种用法。

相关文章
相关标签/搜索