技术图文:如何通过 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 的交易数据?
技术图文:如何通过 LINQ 查找集合中的重复数据?相关推荐
- java去重复的集合_如何去除Java中List集合中的重复数据
1.循环list中的所有元素然后删除重复 public class duplicatRemoval { public static List removeDuplicate(List list){ f ...
- 如何利用sql查找表中的重复数据?
编写一个SQL查询,查找学生表中所有重复的学生名: 分析思路 1.看到"找重复"的关键字眼,首先要用分组函数(group by),再用聚合函数中的计数函数count()给姓名列计数 ...
- 怎么有效地查询MySQL表中的重复数据
在MySQL数据库中,偶尔会遇到需要查找表中出现的重复数据的情况.这种情况下,我们可以通过编写一些SQL查询语句轻松地找到并处理这些重复行.本文将介绍一些常见的方法和技巧,帮助你有效地查询MySQL表 ...
- 【Groovy】集合遍历 ( 使用集合的 findAll 方法查找集合中符合匹配条件的所有元素 | 代码示例 )
文章目录 一.使用集合的 findAll 方法查找集合中符合匹配条件的所有元素 1.闭包中使用 == 作为 findAll 方法的查找匹配条件 2.闭包中使用 is 作为 findAll 方法的查找匹 ...
- matlab查找集合中某个元素的位置/Struct结构体某个字段值的位置
% 查找集合中某个元素的位置 C = {'xlh','gyl','xyh'}; c = strcmp(C,'gyl'); % logical array ind0 = find(c==1);% Str ...
- 题目:查找数组中的重复数字,要求空间复杂度为O(1)(基于Java实现)
题目:查找数组中的重复数字,要求空间复杂度为O(1)(基于Java实现) 题目: 在一个长度为 n 的数组 nums 里的所有数字都在 0-n-1 的范围内.数组中某些数字是重复的,但不知道有几个数字 ...
- 区块链中查找区块中的交易数据
查找区块中的交易数据 using System; using BitcoinBlockchain.Data; using BitcoinBlockchain.Parser; using System. ...
- Java-Runoob-高级教程-实例-数组:10. Java 实例 – 查找数组中的重复元素-un
ylbtech-Java-Runoob-高级教程-实例-数组:10. Java 实例 – 查找数组中的重复元素 1.返回顶部 1. Java 实例 - 查找数组中的重复元素 Java 实例 以下实例 ...
- Java基础知识强化之集合框架笔记27:ArrayList集合练习之去除ArrayList集合中的重复字符串元素...
1. 去除ArrayList集合中的重复字符串元素(字符串内容相同) 分析: (1)创建集合对象 (2)添加多个字符串元素(包含重复的) (3)创建新的集合 (4)遍历旧集合,获取得到每一个元素 (5 ...
最新文章
- 我在ChinaUnix上看到的有点点用的帖子
- matlab cell类型数组存至txt文件
- Java的回调机制--学习笔记
- java多台_Java 多态
- java知识总结-25
- java数组元素的排序_java学习之数组元素排序,冒泡排序和选择排序
- 关于聚类分析、判别分析、主成分分析、因子分析等多元统计分析方法
- 有关深度估计的几篇文章的阅读笔记
- Android基础入门教程——7.5.4 WebView文件下载
- python下载安装教程-Python下载并安装图形教程[超级详细]
- nali for win golang版, 显示ip 的小工具
- 成都蚂蚁金服java_成都蚂蚁金服暑期实习Java后台开发面经(已收到OC)
- Java Web三大组件
- 人在当时处境中,像旋涡中的一片落叶,身不由己
- Mac上下载百度云盘大文件百度云盘客户端限速怎么处理
- 【C语言】二维数组定义以及引用
- win10打印机服务器属性修改,Win10专业版中如何更改打印机端口
- csp-j2第四题解
- ADS Assignment of DP
- 【开服必备】用Python优雅的生成用户验证码
热门文章
- PL/SQL编程:用for循环算出5的阶乘
- UI设计需要报培训班学习吗
- CSS面试复习(三):预处理器、工程化方案、三大框架中的CSS
- 【ASP.NET Core】解决“The required antiforgery cookie xxx is not present”的错误
- 给 Windows 驱动程序安装提速
- 认清Hadoop和Spark的这几点区别,学习时才能事半功倍
- ubuntu 12 JDK 编译
- 多个class相同的input标签 获取当前值!方法!
- 转自一个面试者的“提示”
- 想法1 : 突然萌发的 “天时地利人和”-----优化