• 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}:	");
            foreach (var person in lookup)
            {
                Console.Write($"{person.Name},{person.Age}	");
            }
            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第二种用法*************************************
  • 相关阅读:
    02 序列模型问题
    02 序列模型问题
    04 电路交换
    31 路由算法.md
    NumPy入门教程
    有穷自动机
    上下文无关语法
    基本乐理
    正则表达式
    【OpenCV入门教程之七】 玩转OpenCV源代码:生成OpenCV工程解决方案与OpenCV源码编译(转)
  • 原文地址:https://www.cnblogs.com/springsnow/p/14994704.html
Copyright © 2020-2023  润新知