技术图文:如何通过 LINQ 查找集合中的重复数据?
背景
在前几天介绍的 如何利用C#实现Huffman编码? 的图文中有以下代码。
private List<HuffmanTreeNode> CreateInitForest(string str)
{if (string.IsNullOrEmpty(str))throw new ArgumentNullException();List<HuffmanTreeNode> result = new List<HuffmanTreeNode>();char[] charArray = str.ToCharArray();List<IGrouping<char, char>> lst = charArray.GroupBy(a => a).ToList();foreach (IGrouping<char, char> g in lst){char data = g.Key;int weight = g.ToList().Count;HuffmanTreeNode node = new HuffmanTreeNode(data, weight);result.Add(node);}return result;
}
该代码实现了统计字符串 str
中不同字符出现的频数,并把这个频数作为 Huffman 树结点的权值,字符作为数据,生成对应的 Huffman 树的叶子结点。
在这篇图文发布之后,很多同学问我,针对数据集合的扩展方法 GroupBy
如何使用,我在这里给大家总结一下。
技术分析
GroupBy
从字面意义上理解就是根据 By
指定的规则对数据进行分组,所谓的分组就是将一个“数据集合”划分成若干个“小区域”,然后针对若干个“小区域”进行数据处理。这里的 GroupBy
方法与 SQL 语句中的 GroupBy
功能是完全一样的。
下面,我通过例子给大家介绍GroupBy
方法的应用。
Step1. 构造集合中的元素类型 Student
。
public class Student
{public string Name { get; set; }public int Age { get; set; }public Student(string name, int age){Name = name;Age = age;}
}
Step2. 构造一个Student
的数据集合List<Student>
。
List<Student> lst = new List<Student>
{new Student("赵一", 17),new Student("钱二", 16),new Student("张三", 19),new Student("李四", 18),new Student("王五", 16),new Student("刘六", 17),new Student("刘六", 19)
};
Step3. 将集合数据按照年龄分组,并把分组结果显示出来。
List<IGrouping<int, Student>> sameAge= lst.GroupBy(a => a.Age).ToList();sameAge.ForEach(a =>
{Console.WriteLine("年龄为" + a.Key + "的人为:");a.ToList().ForEach(b =>{Console.WriteLine(b.Name);});
});
Step4. 将集合数据按照年龄分组,并把分组中包含元素大于1的显示出来。
List<IGrouping<int, Student>> sameAge= lst.GroupBy(a => a.Age).Where(g => g.Count() > 1).ToList();sameAge.ForEach(a =>
{Console.WriteLine("年龄为" + a.Key + "的人为:");a.ToList().ForEach(b =>{Console.WriteLine(b.Name);});
});
总结
通过上面的例子,给大家演示了 GrouBy
方法的使用,该方法在实际项目中也有非常重要的应用。比如在一些继电保护的系统中,保护动作的数据集可以按照“保护类型”、“生产厂家”、“运行年限”、“电压等级”进行统计,应用GroupBy
扩展方法,可以避免对数据库的频繁查询,提升系统的运行效率。
好了!今天就到这里了,我是程序员老马,有空的时候大家聊聊人生!See You!
相关图文:
- 扩展方法(一):扩展方法概述
- 扩展方法(二):扩展方法的实现与调用
- 扩展方法(三):为枚举类型创建方法
- 扩展方法(四):在编译时绑定扩展方法的规则
- Lambda表达式(一):引出
- Lambda表达式(二):C#常用委托
- Lambda表达式(三):LINQ初步
- Lambda表达式(四):Lambda表达式与Expression树
- 如何利用 C# 实现 K 最邻近算法?
- 如何利用 C# 实现 K-D Tree 结构?
- 如何利用 C# + KDTree 实现 K 最邻近算法?
- 如何利用 C# 对神经网络模型进行抽象?
- 如何利用 C# 实现神经网络的感知器模型?
- 如何利用 C# 实现 Delta 学习规则?
- 如何利用 C# 爬取带 Token 验证的网站数据?
- 如何利用 C# 向 Access 数据库插入大量数据?
- 如何利用 C# 开发「桌面版百度翻译」软件!
- 如何利用 C# 开发「股票数据分析软件」(上)
- 如何利用 C# 开发「股票数据分析软件」(中)
- 如何利用 C# 开发「股票数据分析软件」(下)
- 如何利用 C# 爬取「财报说」中的股票数据?
- 如何利用 C# 爬取 One 持有者返利数据!
- 如何利用 C# 爬取Gate.io交易所的公告!
- 如何利用 C# 爬取BigOne交易所的公告!
- 如何利用 C# 爬取 ONE 的交易数据?
相关文章:

mysql的基本知识
安装:http://www.cnblogs.com/sshoub/p/4321640.html 导库 http://www.cnblogs.com/yuwensong/p/3955834.html 报错:Error was: No module named PIL pip install image转载于:https://www.cnblogs.com/baldermurphy/p/7403778.html

msys下产生dll的导入库
有些时候在只有一个dll的情况下,如果需要隐式链接的话,就需要为该dll产生一个导入库.注意导入库是不能跨编译器使用的,在mingw中导入库需要以.a结尾,而vs则以.lib 以下的方法是在Msys产生mingw及vs 的导入库 , 打开MSys工具 首先生成dll库的d…

零基础小白如何学习好UI设计
智能时代的来临,很多企业都越来越注重用户体验这一块,想要有一个吸引用户的好页面,UI设计师岗位不可或缺,如今越来越多的人想要学习UI设计技术,那么对于零基础小白如何学习好UI设计呢? 零基础小白如何学习好UI设计? …

技术图文:如何利用BigOne的API制作自动化交易系统 -- 获取账户资产
背景 前几天我们介绍了如何使用 BigONE Developer API V2 来获取身份令牌的方法「如何利用BigOne的API制作自动化交易系统 – 身份验证」。一旦获取了身份令牌,我们就可以在网络请求的 header 中加入令牌来获取自己的账户数据,创建买入、卖出订单&#…

『网站升级』PHPWind8.0至8.3升级过程及问题种种回顾录
上星期的PHPWind杭州峰会之后,PHPWind发布了8.3版。紧接着淘连接,淘满意,团购PHPWind的一系统ARP应用开始进入我们公司技术苦力的耳朵里(也就是偶),偶知道有大事要发生了。于是乎。领导悠然降至,…

新浪 抓取详情页
转载于:https://www.cnblogs.com/tian-sun/p/7404493.html

零基础如何学习软件测试
很多人想学软件测试是因为软件测试是进入到IT行业里比较快的一门技术,软件测试的门槛比较低,初学者和零基础小白学起来都是比较容易的,下面小编就详细的给大家介绍一下具体零基础如何学习软件测试? 零基础如何学习软件测试?对于初级测试而言…
VPS使用初体验
很早就想建个人网站,但是出于各种限制,一直没有实施。前几天开通了网银,便再次萌发了建站的想法。。。 购买一个了enom的域名,然后寻找比较好的虚拟主机,发现ubuntuchina上有个卖vps的,价格还行,…

LeetCode实战:相同的树
题目英文 Given two binary trees, write a function to check if they are the same or not. Two binary trees are considered the same if they are structurally identical and the nodes have the same value. Example 1: Input: 1 1/ \ / \2 3 …

mysql数据库常用命令
登录: mysql -h 服务器地址 -u 登录名 -P 端口 -p 密码 (登录时最好先不输入密码,等下一条提示出来之后再输,这样可以在界面中隐藏密码) 退出: quit 或者 exit 注意:登录数据库系统后࿰…

Java入门学习注意事项有哪些?
想要学好java技术,做好学习规划路线和注意事项是非常重要的,尤其是零基础学员,Java涉及到的知识点非常多,我们需要制定合理的Java学习路线图,这样会事半功倍,下面小编和大家总结一下Java入门学习注意事项有…

在Hibernate中处理批量更新和批量删除
批量更新是指在一个事务中更新大批量数据,批量删除是指在一个事务中删除大批量数据。以下程序直接通过Hibernate API批量更新CUSTOMERS表中年龄大于零的所有记录的AGE字段: 如果CUSTOMERS表中有1万条年龄大于零的记录,那么Session的find()方法…

LeetCode实战:对称二叉树
题目英文 Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center). For example, this binary tree [1,2,2,3,4,4,3] is symmetric: 1/ \2 2/ \ / \ 3 4 4 3But the following [1,2,2,null,3,null,3] is not: 1/ \2 2\ \3 …

flannel 概述 - 每天5分钟玩转 Docker 容器技术(58)
2019独角兽企业重金招聘Python工程师标准>>> flannel 是 CoreOS 开发的容器网络解决方案。flannel 为每个 host 分配一个 subnet,容器从此 subnet 中分配 IP,这些 IP 可以在 host 间路由,容器间无需 NAT 和 port mapping 就可以跨…

Python如何实现穷举搜索?
穷举搜索就是在整个搜索空间范围内尝试每一种可能性,直到找到目标值或者整个搜索空间都找完也没有找到目标值。最常见的穷举搜索就是线性搜索,即按照顺序简单检查所有不同的可能性。 例如:2个警察追逐强盗到了一个废弃旅馆的二楼走廊…

技术图文:如何利用BigOne的API制作自动化交易系统 -- 订单系统
背景 前面几天,我们一起封装了 BigONE 提供的“身份验证”与“资产账户”部分的 API。 如何利用BigOne的API制作自动化交易系统 – 身份验证如何利用BigOne的API制作自动化交易系统 – 获取账户资产 现在,离搭建咱们的自动化交易系统更近一步了。 本…

[解决]eclipse中android自动补全/提示卡机或假死
这是Eclipse3.6版本的特有问题,想彻底解决此问题的话,还是建议换为3.5/3.4; 在保持版本不变的前提下,可以按如下方法优化下: 解决办法:1. 找到你的JDK安装目录下的src.zip文件;2. 打开eclipse: …

17.SpringMVC核心技术-拦截器
SpringMVC 中的 Interceptor 拦截器是非常重要和相当有用的,它的主要作用是拦截指定 的用户请求, 并进行相应的预处理与后处理。其拦截的时间点在“处理器映射器根据用户提 交的请求映射出了所要执行的处理器类, 并且也找到了要执行该处理器类…

Python培训讲解二叉树的三种深度
python代码实现了二叉树,这次将会实现二叉树的几种遍历方法,来更好的解析二叉树的结构特点。分别是一种广度遍历,和三种深度遍历方法:先序遍历,中序遍历,后序遍历。下面是代码实现: 1、先序遍历…

Ajax弹出漂亮可拖动的提示层(窗)效果
<html><head><meta http-equiv"Content-Type" content"text/html; charsetgb2312" /><title>Ajax提示框</title><style type"text/css">a{ color:#000; font-size:12px;text-decoration:none}a:hover{ colo…

技术图文:如何解决 DAO 抛出的 80040154 错误?
背景 前几天,咱们一起解决了向 Access 数据库插入大量数据效率底下的问题。通过实验表明:利用 DAO 的方式可以极大的提升数据插入速度。 如何利用 C# 向 Access 数据库插入大量数据? 可是,给电力局升级了软件产品之后ÿ…

路由器配置实践 教你如何在Linux中三台主机两个网段互相通信
大家好我是你们的齐天大圣又到了齐天大圣给大家讲解的时间了今天我带你们做一个 大大项目 你们信不信如果把你不小心打开这个文档 希望你能看完 这个博文花费了我两天的时间所以请尊重我的劳动 假装看完好吗 齐天大圣在此谢过各位看官首先欢迎大家观看操作步骤我们正式开始题目…

Web前端学习有哪些技巧?
想要学好web前端技术,在学习过程中找到合适的方法和技巧,那么在实际学习过程中会更加的容易和快速掌握知识重点,尤其是对于初学者尤为关键,下面小编就为大家详细的介绍一下Web前端学习有哪些技巧?希望能够对学习有所帮助。 Web前…

技术图文:如何利用C# + Echarts 绘制 Bar Simple?
背景 Echarts 是百度推出的一个使用 JavaScript 实现的开源可视化库。 该库提供了常规的折线图、柱状图、散点图、饼图、K线图,用于统计的盒形图,用于地理数据可视化的地图、热力图、线图,用于关系数据可视化的关系图、treemap、旭日图&…

Moss/Sharepoint 一些很重要的API备忘
1.根据用户名获取用户 SPUser user web.EnsureUser((new SPFieldLookupValue(item["Mitarbeiter"].ToString())).LookupValue); 2.根据guid获取Feature对象 SPFeature listDisplaySettingFeature site.Features[newGuid("88E9E47A-BA92-47ab-A253-8AA472CCC76B…
vue从创建到完整的饿了么(5)v-for,v-bind与计算属性
说明 1.上一章--Home.vue及vue-resource使用2.cangdu大神的项目源码地址--Github地址3.接口地址--Github地址4.UI框架用的是--Mint UI5.下一章--登录注册页面及密码的暗明文转换 开始 1.先看看Home.vue代码 <template><div><mt-header fixed><span slot&q…

python查询mysql中文乱码问题
相信很多在工作中的Python小伙伴,经常会遇到一些工作上的问题,例如查询mysql中文乱码问题,Python连接mysql数据库时,读取数据库中的中文出现乱码,所有中文都显示为问号了,那么该如何解决这个问题呢?解决问…

技术图文:如何利用C# + Echarts 绘制「堆叠条形图」?
背景 前几天,我们介绍了 如何利用C# Echarts 绘制 Bar Simple?,原以为把 Echarts 封装到这种程度就可以完成当前任务了。 可是,把软件原型提交给对方时,发现对方更希望“可视化设备发生缺陷的具体数据”。也即利用 堆…

Javascript原型链
这是关于原型链的一系列的现象与原理的解释以及例子 【转载请注明出处与地址】 分成4个部分阐述: 1.如何创建一个对象 2.使用原型链prototype实现对象的继承. 3.原型链上属性和方法的联系与规则 4.深入剖析原型链。 一、如何创建一个对象: 1.使用关键字n…

springbatch apache-activemq 整合(往mq中put数据,从mq中take数据)
简单测试如下:1:收下下载apache-activemq-5.14.4 解压apache-activemq-5.14.4\bin\win64,运行activemq.bat启动本地MQ服务器。通过浏览器可以查看本地MQ服务器的信息。http://127.0.0.1:8161/admin/index.jsp 2: 先往mq中put数据配置如下&…