IComparer与IEqualityComparer的简单使用

场景一:对象列表的自定义排序

简单类型的列表,可以直接使用Linq的OrderBy或OrderByDescending进行排序,复杂对象的列表排序可以使用Sort()和IComparer实现自定义对象比较规则。假如有一个Box类,它有名称、长、宽、高四个属性,如下图所示:

现在有一个Box对象列表,需要按体积从小到大排序,我们用到List的Sort()方法,该方法要求传入IComparer对象,如下图所示:

接着我们定义自己的排序类BoxCubeAscComparer,如下图所示:

BoxCubeAscComparer类实现IComparer的Compare方法,在方法中进行体积的运算。该方法返回参数为int类型,1表示大于,-1表示小于,0表示等于。如果想实现倒序排序,只要大于的时候返回-1即可,如下图所示:

定义好上面两个排序类后,我们在Sort方法中使用,如下图所示:

运行结果如下 :

场景二:对象列表的自定义去重

简单类型的列表,可以直接使用Linq的Distinct去重,复杂对象的去重可以使用Distinct()和IEqualityComparer实现自定义两个对象的比较规则。还是使用上面的Box类,我们要对Box对象列表去重,最后两个对象只保留一个,如下图所示:

Distinct()要求我们传入IEqualityComparer对象,我们定义一个BoxEqualityComparer类,如下图所示:

重写Equals和GetHashCode方法,我们在主方法中使用这个类,如下图所示:

运行后结果:

很简单的东西,没啥好说的,希望帮到你~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/304185.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux 远程开机(walk on lan)

Linux 远程开机(walk on lan)一,什么情况下需要远程开机? 如果我们的服务器没有部署在本地(实际上通常都是这样的,我们会把服务器托管到IDC机房), 而且服务器在机房中不止一台&am…

程序显示文本框_【教程】TestComplete测试桌面应用程序教程(二)

TestComplete是一款具有人工智能的自动UI测试工具,利用自动化测试工具和人工智能支持的混合对象识别引擎,轻松检测和测试每个桌面,Web和移动应用程序。其中,TestComplete支持测试使用C、C#、VB.NET、Java、Delphi、C …

陕西省计算机二级报名流程,计算机二级考试报名流程

计算机二级考试报名流程第一次参加全国计算机等级考试的考生对于网上报名的流程,对全国计算机考试流程中某些环节并不清楚。下面是小编为大家带来的计算机二级考试报名流程,欢迎阅读。(一)注册账号和登录1)考生首次登录系统需要注册登录通行证&#xff0…

Git 的 4 个阶段的撤销更改

虽然git诞生距今已有12年之久,网上各种关于git的介绍文章数不胜数,但是依然有很多人(包括我自己在内)对于它的功能不能完全掌握。以下的介绍只是基于我个人对于git的理解,并且可能生编硬造了一些不完全符合git说法的词…

51CTO下载专题有奖征集建议:您的期待,我们的方向!

2010年5月10日,51CTO下载专题 隆重上线。精细的技术领域、优质的技术资源、大方的设计风格......让您对精品资源一网打尽,直达心灵所需! 51CTO下载专题每周发布1-2期,旨在帮助大家在最短的时间里,找到自己感兴趣技术点…

Visual Studio SnippetDesigner使用

SnippetDesigner代码片段编辑器这是一款在Visual Studio上代码片段编辑器插件,可以轻松创建代码片段,为什么要用这个代码片段呢,理由:平常在编码过程中,有许多重复性的代码语句,为了提高编码速度与便捷&…

python中merge函数怎么用_Python Merge函数原理及用法解析

Merge函数的用法简单来说Merge函数相当于Excel中的vlookup函数。当我们对2个表进行数据合并的时候需要通过指定两个表中相同的列作为key,然后通过key匹配到其中要合并在一起的values值。然后对于merge函数在Pandas中分为1vs1, 多(m)vs1,以及多(m)vs多(m)…

计算机显卡是指什么时候,电脑哪个是显卡

语音内容:大家好,我是时间财富网智能客服时间君,上述问题将由我为大家进行解答。以台式机电脑为例,一般有两种显卡,找到显卡位置的方法:1、集成显卡。集成显卡被集成在CPU或者主板芯片组内部,不…

人民币大写格式转换

在处理财务报表时,单元格格式设置为人民币大写后,-123显示为红色的“壹佰贰拾叁元整”,打印出来后无法区别是正数还是负数;同时有的单位习惯在大写数字前加上“人民币大写:”字样。为了满足不同的人民币大写格式的需要…

生态合作与自主可控

生态合作与自主可控是一个大题目,从不同角度来讨论,不同的人会得出不同的结论。为了交流不空洞,先介绍一个案例,它具有普遍性:L总应该是前年与我们联系过,今年刚刚与我们联系描述了一下他们的现状&#xff…

css规则中区块block,CSS的命名方式:BEM(区块、元素、修饰符)

原标题:CSS的命名方式:BEM(区块、元素、修饰符)本资源由 伯乐在线- 凝枫整理,您也想贡献一份力量?欢迎加入我们 重要概念“Block”区块区块的定义是:一个逻辑和功能兼备的独立页面组件,也可以称为web组件。一个区块包含…

表达式如何获取复选框的值_Nuke表达式 Expression节点讲解

nuke中的表达式节点对于大多数人来说有点神秘,但它非常强大。通常它通过简单的if / else语句修补数据,但在这里我们将从最基本的原则,到一些长期被遗忘的高中数学做一些简单的技巧,最后把它们融合在一起。第一步创建Constant节点&…

卸载重新安装Sql Server 2005出现“性能监视器计数器要求”错误解决方法【转】...

错误原因造成这种错误的原因在于Microsoft SQL Server 安装程序中的安装配置检查器 (SCC)在安装SQL Server前会验证计数器注册表项的值。如果 SCC 无法验证现有的注册表项,或 SCC 无法运行 lodctr.exe 系统程序,则 SCC 检查会失败,致使安装受…

如何在 ASP.NET Core MVC 5 中处理未知的 Action

ASP.NET Core MVC 5 是一个轻量级,开源的,利于单元测试的基于 ASP.NET Core 运行时的 web 框架,在开发时你肯定会遇到不少那些 request 无法匹配 Action 的情况,通常做法是抛出 404,但有些场景下我希望能收口到统一一个…

一文读懂 HMM 模型和 Viterbi 算法

隐含马尔可夫模型(Hidden Markov Model)隐含马尔可夫模型并不是俄罗斯数学家马尔可夫发明的,而是美国数学家鲍姆提出的,隐含马尔可夫模型的训练方法(鲍姆-韦尔奇算法)也是以他名字命名的。隐含马尔可夫模型…

qtabwidget设置tab高度_VC|富文本编辑框CRichEditCtrl的字体与段落设置

将富文本编辑框设置为2.0,关联一个control变量m_textblock:1 字体设置富文本编辑框关于字体设置的成员函数:BOOL CRichEditCtrl::SetSelectionCharFormat( CHARFORMAT& cf );此成员函数用来设置这个CRichEditCtrl对象中的当前选择的文本的…

css伪类元素加在元素前,CSS伪类:before在元素之前 :after 在元素之后实例讲解

本教程简单的介绍一下关于CSS伪类:before, :after详解,有需要了解的朋友可以参考一下下。:before 伪元素在元素之前添加内容这个伪元素允许创作人员在元素内容的最前面插入生成内容。默认地,这个伪元素是行内元素,不过可以使用属性 display 改…

云计算的关键特点及挑战

本文节选自《云计算:实现、管理与安全》导言 云计算的关键特点 一个云计算环境有几个关键特点。服务经常提供给特定 的看到因他们的资本支出最小化而获益的消费者和小企业。 这有助于降低在市场进入门槛,因为用来提供这些产品的基础设施由云服务提供商拥…

Mock 框架 Moq 的使用

Mock 框架 Moq 的使用IntroMoq 是 .NET 中一个很流行的 Mock 框架,使用 Mock 框架我们可以只针对我们关注的代码进行测试,对于依赖项使用 Mock 对象配置预期的依赖服务的行为。Moq 是基于 Castle 的动态代理来实现的,基于动态代理技术动态生成…

凝思系统改时间_国产操作系统往事:四十年激变,终再起风云

在这一轮技术浪潮中,无论是底层的开发生态,算力的硬件基础,还是五花八门的商业化落地场景,中国企业都有着毋庸置疑的话语输出能力。而另一个全民皆知、中国ICT产业的长期阵痛——国产操作系统,也在2019世界人工智能大会…