C# List集合分组的两种方法总结 - c# - 方帮信


大厂面试直通卡 本周拉勾免费课:《深入浅出搞定React》 7月6号下线 【腾讯云】2021新春采购节,爆款产品特惠,助力企业上云
当前位置: 首页 >  > 技术 > 软件开发 > c#

C# List集合分组的两种方法总结

2019/1/28 11:25:51 浏览

起初如果不会直接使用Group的方法,可能会使用一堆的for循环遍历每一个元素,然后使用排重,排重完成后进行排序。这样不仅写法比较麻烦,而且效率比较低下面整理两种针对List集合的常见方法:①使用IGrouping按照年份对订单进行分组,得到有订单的所有年份,便可以使用如…

站长送干货喽:

1.拉勾教育7天VIP

2.大场面试题第一季-阿里篇视频讲解

站长的微信:changyandoublog

起初如果不会直接使用Group的方法,可能会使用一堆的for循环遍历每一个元素,然后使用排重,排重完成后进行排序。这样不仅写法比较麻烦,而且效率比较低

下面整理两种针对List集合的常见方法:

①使用IGrouping

按照年份对订单进行分组,得到有订单的所有年份,便可以使用如下方法。

 List<int> years = new List<int>();
 foreach (IGrouping<int, OrderItem> group in OrderList.GroupBy(x => x.Year).OrderByDescending(x => x.Key))
 {
     years.Add(group.Key);
      //foreach (OrderItem item in group.OrderBy(a => a.Year))
     //{
     //    years.Add(item.Year);
     //}
 }   

步骤一:通过GroupBy对List集合进行分组
步骤二:遍历GroupBy得到【IEnumerable<IGrouping<TKey, TSource>>】公开枚举器
步骤三:遍历公开枚举器得到每一个分组,其中group.Key就是所属分组的分组项,这里就是指对应的分组后的年份

②使用lambda表达式

List<int> years = OrderList.GroupBy(p => p.Year).OrderByDescending(p => p.Key).Select(p => p.Key).ToList();  

这种方法表达起来就相对更加简单,实际上同上一种写法原理是一样的,只不过表达方式稍微有所不同。

在这里进行一点点的扩展,有的同学可能会用到,那就是在排序、分组后在最后的Select过程中做一点小动作如下:

OrderList.GroupBy(p => p.Year).OrderByDescending(p => p.Key).Select(h => new { year=h.Key,count=h.Count() }).ToList();  

划线部分就是我们进行的简单改造,这里通过Select,在其中构造了一个新的对象

在msdn中是这么解释的,“将序列中的每个元素投影到新表单中”。

1.png


如何抗住亿级流量之布隆过滤器.jpg

来源:方帮信(微信:changyandoublog,邮箱:changyandou@126.com),欢迎分享!