背景

在前几天介绍的 如何利用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 查找集合中的重复数据?相关推荐

  1. java去重复的集合_如何去除Java中List集合中的重复数据

    1.循环list中的所有元素然后删除重复 public class duplicatRemoval { public static List removeDuplicate(List list){ f ...

  2. 如何利用sql查找表中的重复数据?

    编写一个SQL查询,查找学生表中所有重复的学生名: 分析思路 1.看到"找重复"的关键字眼,首先要用分组函数(group by),再用聚合函数中的计数函数count()给姓名列计数 ...

  3. 怎么有效地查询MySQL表中的重复数据

    在MySQL数据库中,偶尔会遇到需要查找表中出现的重复数据的情况.这种情况下,我们可以通过编写一些SQL查询语句轻松地找到并处理这些重复行.本文将介绍一些常见的方法和技巧,帮助你有效地查询MySQL表 ...

  4. 【Groovy】集合遍历 ( 使用集合的 findAll 方法查找集合中符合匹配条件的所有元素 | 代码示例 )

    文章目录 一.使用集合的 findAll 方法查找集合中符合匹配条件的所有元素 1.闭包中使用 == 作为 findAll 方法的查找匹配条件 2.闭包中使用 is 作为 findAll 方法的查找匹 ...

  5. matlab查找集合中某个元素的位置/Struct结构体某个字段值的位置

    % 查找集合中某个元素的位置 C = {'xlh','gyl','xyh'}; c = strcmp(C,'gyl'); % logical array ind0 = find(c==1);% Str ...

  6. 题目:查找数组中的重复数字,要求空间复杂度为O(1)(基于Java实现)

    题目:查找数组中的重复数字,要求空间复杂度为O(1)(基于Java实现) 题目: 在一个长度为 n 的数组 nums 里的所有数字都在 0-n-1 的范围内.数组中某些数字是重复的,但不知道有几个数字 ...

  7. 区块链中查找区块中的交易数据

    查找区块中的交易数据 using System; using BitcoinBlockchain.Data; using BitcoinBlockchain.Parser; using System. ...

  8. Java-Runoob-高级教程-实例-数组:10. Java 实例 – 查找数组中的重复元素-un

    ylbtech-Java-Runoob-高级教程-实例-数组:10. Java 实例 – 查找数组中的重复元素 1.返回顶部 1. Java 实例 - 查找数组中的重复元素  Java 实例 以下实例 ...

  9. Java基础知识强化之集合框架笔记27:ArrayList集合练习之去除ArrayList集合中的重复字符串元素...

    1. 去除ArrayList集合中的重复字符串元素(字符串内容相同) 分析: (1)创建集合对象 (2)添加多个字符串元素(包含重复的) (3)创建新的集合 (4)遍历旧集合,获取得到每一个元素 (5 ...

最新文章

  1. 我在ChinaUnix上看到的有点点用的帖子
  2. matlab cell类型数组存至txt文件
  3. Java的回调机制--学习笔记
  4. java多台_Java 多态
  5. java知识总结-25
  6. java数组元素的排序_java学习之数组元素排序,冒泡排序和选择排序
  7. 关于聚类分析、判别分析、主成分分析、因子分析等多元统计分析方法
  8. 有关深度估计的几篇文章的阅读笔记
  9. Android基础入门教程——7.5.4 WebView文件下载
  10. python下载安装教程-Python下载并安装图形教程[超级详细]
  11. nali for win golang版, 显示ip 的小工具
  12. 成都蚂蚁金服java_成都蚂蚁金服暑期实习Java后台开发面经(已收到OC)
  13. Java Web三大组件
  14. 人在当时处境中,像旋涡中的一片落叶,身不由己
  15. Mac上下载百度云盘大文件百度云盘客户端限速怎么处理
  16. 【C语言】二维数组定义以及引用
  17. win10打印机服务器属性修改,Win10专业版中如何更改打印机端口
  18. csp-j2第四题解
  19. ADS Assignment of DP
  20. 【开服必备】用Python优雅的生成用户验证码

热门文章

  1. PL/SQL编程:用for循环算出5的阶乘
  2. UI设计需要报培训班学习吗
  3. CSS面试复习(三):预处理器、工程化方案、三大框架中的CSS
  4. 【ASP.NET Core】解决“The required antiforgery cookie xxx is not present”的错误
  5. 给 Windows 驱动程序安装提速
  6. 认清Hadoop和Spark的这几点区别,学习时才能事半功倍
  7. ubuntu 12 JDK 编译
  8. 多个class相同的input标签 获取当前值!方法!
  9. 转自一个面试者的“提示”
  10. 想法1 : 突然萌发的 “天时地利人和”-----优化