lamda list 分组_C List集合分组的两种方法总结

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

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

①使用IGrouping

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

List years = new List();

foreach (IGrouping 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>】公开枚举器

步骤三:遍历公开枚举器得到每一个分组,其中group.Key就是所属分组的分组项,这里就是指对应的分组后的年份

②使用lambda表达式

List 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中是这么解释的,“将序列中的每个元素投影到新表单中”。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值