LINQ之LookUp

[C#] LINQ之LookUp - cnxy - 博客园 (cnblogs.com)

Lookup<TKey,TElement>类似于 Dictionary<TKey,TValue> 。 不同之处在于,将 Dictionary<TKey,TValue> 键映射到单个值,而将键 Lookup<TKey,TElement> 映射到值的集合。

Enumerable.ToLookup 方法 (System.Linq) | Microsoft Docs

代码:

void Main()
{
    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个之多。

    Console.WriteLine("********ToLookUp第一种用法*************************************");
    //public static ILookup<TKey, TSource> ToLookup<TSource, TKey>(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector);
    //官方释义:根据指定的键选择器函数,从IEnumerable<TSource> 创建一个 ILookup < TKey, TSource >。

    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();
    }

    Console.WriteLine("********Join第二种用法*************************************");
    //    由于ToLookUp与GroupBy相似,因此,第二、三、四种用法请参考请参考[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>。
    //
    //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>。
    //
    //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>。
}
class Person
{
    public string Name { set; get; }
    public int Age { set; get; }
    public string Gender { set; get; }
    public override string ToString() => Name;
}

结果:

********ToLookUp第一种用法*************************************
Male:  P1,18  P2,19  
Female:  P2,17  
********Join第二种用法*************************************

posted on 2021-07-10 19:59  springsnow  阅读(145)  评论(0编辑  收藏  举报

导航