一行搞定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也是自定义的变量,这个变量在这里等于每个组的成员数量。

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

  1. python统计句子中单词个数_python练习:一行搞定-统计一句话中每个单词出现的个数...

    原博文 2018-10-04 19:42 − 一行搞定-统计一句话中每个单词出现的个数 >>> s'i am a boy a bood boy a bad boy' 方式一:> ...

  2. [python]一行搞定字符串排序

    [python]一行搞定字符串排序 本文最初发表于恋花蝶的博客(http://blog.csdn.net/lanphaday),欢迎转载,但请保留本声明. 一般情况下,python中对一个字符串排序相 ...

  3. Android NDK开发之旅(2):一篇文章搞定Android Studio中使用CMake进行NDK/JNI开发

    Android NDK开发之旅(2):一篇文章搞定android Studio中使用CMake进行NDK/JNI开发 (码字不易,转载请声明出处:http://blog.csdn.NET/andrex ...

  4. 时间计算题100道_搞定一建经济中让你抓耳挠腮的计算题(1)

    搞定一建经济中让你抓耳挠腮的计算题(1) 经济这一门的计算题是比较多,整本教材的计算题是在30个左右,其中几个比较难点的题是在第一章"工程经济"中出现,我们就来解决一下第一章中最重 ...

  5. Phpstorm如何批量删除空行 一行搞定

    打开文件,按ctrl+r 输入 ^\n 并勾选 Match Case和Regex,匹配以后,点Replace all 就搞定了 效果图

  6. kaggle notebook在git push时附带用户民和密码(一行搞定,全部写在一行中)

    因为kaggle notebook是非交互式的,显然不能git push后再输入用户名和密码. 所以下面是直接在git push中直接填写密码和用户名. !cd /kaggle/working/lig ...

  7. 轻松搞定分组报表中的各种排序

    在做分组报表统计时,我们经常会被要求按照数据升序或降序排序.在 group 函数的参数中,我们可以指定分组后对组的排序表达式,这样报表展现时能够直接根据该表达式进行排序了.我们先来看一个简单的例子,如 ...

  8. JAVA向client打印一行_java8 httpclient NameValuePair转换14行代码一行搞定!

    工作中,我们常常会通过httpclient调用一些三方提供的api, 进行参数传递的时候会用NameValuePair[ ] 于是我们同事写了一个方法封装一下 NameValuePair,将map中用 ...

  9. python形参和实参同名_一道题带你搞定Python函数中形参和实参问题

    昨天在Python学习群里有位路人甲问了个Python函数中关于形参和实参一个很基础的问题,虽然很基础,但是对于很多小白来说不一定简单,反而会被搞得稀里糊涂.人生苦短,我用Python. 为了解答大家 ...

  10. 文件格式和扩展名不匹配.文件可能已损坏_自媒体良器:音频文件批处理,FFmpeg一行搞定!果断收藏...

    引言 FFMpeg 是众多多媒体应用程序的核心,但该程序本身不具备一次转换多个文件的能力. 但也拦不住,FFMpeg 本身是命令行程序,可编写脚本,借助 Bash 轻松快速地构建自动化程序. 1 - ...

最新文章

  1. linux追踪tomcat报错信息,linux下tomcat服务的启动、关闭与错误跟踪
  2. helm滚动更新mysql_kubernetes使用helm滚动更新
  3. 【laravel】docker 部署laravel 遇到的问题?
  4. arthas使用示例:stack输出当前方法被调用的路径
  5. IntrospectorCleanupListener作用
  6. redis哨兵相关详解
  7. scroll-view——小程序横向滚动
  8. JAVA并发篇_公平锁与非公平锁
  9. oracle 10.2.0.1 升级 10.2.0.5,Oracle10.2.0.1RAC 升级 Oracle10.2.0.5案例分享 -DATABASE篇
  10. 详解ThroughTek P2P 供应链漏洞对数百万物联网设备的安全新风险
  11. UVA13017 LA7274 Canvas Painting【哈夫曼编码】
  12. 聊聊我的 ACL2020 论文
  13. 遥感大辞典_常用遥感名词词典
  14. 三维空间中直线间距离的计算
  15. [Java教程 00] 计算机基础
  16. 设计模式 ---建造者模式
  17. 自已动手修改同花顺K线周期的快捷键
  18. 华尔街英语宝典,架构师必备技能
  19. 回车符,换行符与'\0'
  20. 实现JS标签切换效果【CSS图片切换】

热门文章

  1. 过渡属性transition详解
  2. 四月,诗月,你是最美人间四月天。
  3. 明源云预计年亏超7亿元:被花旗下调评级,“人脸识别”遭质疑
  4. cadence导入dxf文件_CADENCE16.3导入DXF文件
  5. ARP断网攻击与监听
  6. vue单页面应用项目优化总结
  7. Android开机速度优化 Android 开机时间优化
  8. springboot笔记整理(超详细,手把手教程!)
  9. mysql 查看 脏页_MySQL:刷脏页
  10. 税务信息化与计算机技术应用开发,税务信息化与计算机技术应用开发岗位辞职报告范文...