一行搞定List<T>中的成员数量统计

33 篇文章 1 订阅

一行搞定List中的成员出现次数的数量统计

经常遇到这么一类问题,我们要统计List<T>列表中不同值成员出现的次数。在C#中可以巧用Linq中的**GroupBy(…)**方法。
下面我们给一个例子,只需一行代码即可搞定成员出现次数的数量统计:

    class MySample
    {
        public static void Main()
        {
            List<int> idList = new List<int>(){3, 5, 4, 3, 5, 6, 7, 7, 9, 0, 1, 3};
            var result = idList.GroupBy(item => item, 
                                            (key, ids) => new {id = key, Cnt = ids.Count()});
            foreach(var item in result)
            {
                Debug.WriteLine($"id:{item.id}  Cnt: {item.Cnt}");
            }
        }
    }

这段代码需要引用命名空间System.Linq。
输出结果如下:

id:3  Cnt: 3
id:5  Cnt: 2
id:4  Cnt: 1
id:6  Cnt: 1
id:7  Cnt: 2
id:9  Cnt: 1
id:0  Cnt: 1
id:1  Cnt: 1

第6-7行(实际为1行)一行代码即实现了出现不通过id的数量统计。
这里用到了委托参数,Lambda表达式,匿名类型等一系列知识点。
下面简单说明下:
既然我们要对List数据进行分组,那么需要确定"组别",Group方法的第一个参数就是要确定选择组别的方法。既然是分组,那么显然每个组别肯定是唯一的,因此官方称呼这个"组别"叫做键值;例子中item => item 这个Lambda表达式表示直接选成员本身的值作为分组的键值;当然,我们需要根据我们的实际情况选定键值,假设我们的需求是需要将id值的平方作为键值,那么Lambda表达式可以这么写:item => item*item。

除了选择,那么Group方法还直接提供了功能,就是可以给出一个"组别"对应的组的信息,至于这个信息里面携带什么内容,完全交给我们用户来定义,这就是靠Group第第二个参数来实现。
(key, ids) => new {id = key, Cnt = ids.Count()} 的这个Lambda表达式就是建立了一个匿名类型,这里的key就表示我们上面建立的键值,ids则就是已经给子分好组的List。id则是匿名类型中自定义变量,在这里等于键值,Cnt也是自定义的变量,这个变量在这里等于每个组的成员数量。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值