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) 编辑 收藏 举报