list1.Sort((m, n) => m.Id - n.Id); id是double类型的为什么回报错

问题产生的地方

 

原因 

对于 double 类型的属性,不能直接使用减法运算符进行比较。减法运算符只能用于数值类型,而 double 是浮点数类型。

要在 double 属性上进行排序,可以使用 CompareTo 方法或者使用自定义的比较器。

更改

要在 double 属性上进行排序,可以使用 CompareTo 方法或者使用自定义的比较器。下面是两种可行的方式:

1.使用 CompareTo 方法:

list1.Sort((m, n) => m.Id.CompareTo(n.Id));

使用了 CompareTo 方法来比较两个 double 值的大小

2.使用自定义的比较器:

public class DoubleComparer : IComparer<double>
{public int Compare(double x, double y){return x.CompareTo(y);}
}// 在排序时使用自定义的比较器
list1.Sort((m, n) => new DoubleComparer().Compare(m.Id, n.Id));

这种写法定义了一个名为 DoubleComparer 的自定义比较器类,实现了 IComparer<double> 接口的 Compare 方法。然后,在排序时使用新建的 DoubleComparer 实例来进行比较。

产生原因

如:list1.Sort((m, n) => m.Id - n.Id);id为double类型,为什么会报错无法将都变了隐式转换为int,为什么会报错无妨将lambda表达式转换成预期委托类型

List<T>Sort 方法的参数是一个委托,用于比较两个元素的大小关系,以实现排序功能。这个委托类型的声明如下:

public delegate int Comparison<in T>(T x, T y);

可以将 lambda 表达式中的 m.Id - n.Id 修改为一个返回整数类型的表达式,比如 (int)(m.Id - n.Id)。这样就可以将 lambda 表达式转换成预期的委托类型,从而成功地实现按照 Id 属性进行排序的功能。

list.Sort((m, n) => m.PositionX - n.PositionX);

 m.PositionX - n.PositionX的结果是一个double 需要强转成int ,但是强转的时候会造成精度丢失 如本来是0.3 会变成0导致认为mn是相等的所以保险起见还是用

list.Sort((m, n) => m.PositionX.CompareTo(n.PositionX));

CompareTo方法 

CompareTo() 方法是用于比较两个值的大小,并返回一个整数作为比较结果的表示。

CompareTo() 方法的返回值为整数,其含义如下:

  • 如果 x 小于 y,则返回一个负数(通常为 -1)。
  • 如果 x 等于 y,则返回零。
  • 如果 x 大于 y,则返回一个正数(通常为 1)。

返回一个整数的好处是可以更灵活地处理比较结果。通过比较结果的正负号,可以判断出两个值的相对大小关系,并进行相应的逻辑处理。

CompareTo 方法是 IComparable 接口的一部分,它定义了一个用于比较对象的方法。因此,只要类实现了 IComparable 接口,就会拥有 CompareTo 方法。

以下是一些常见的具有 CompareTo 方法的类:

  1. Int32Int64DoubleDecimal 等数值类型:这些数值类型都实现了 IComparable 接口,并且提供了 CompareTo 方法来比较它们之间的大小关系。
  2. String 类型:String 类型实现了 IComparable 接口,因此它也具有 CompareTo 方法,用于按照字典顺序比较字符串的大小。
  3. DateTime 类型:DateTime 类型也实现了 IComparable 接口,并提供了 CompareTo 方法,用于比较日期和时间。
  4. 用户自定义类:如果你在自己的类中实现了 IComparable 接口,并提供了 CompareTo 方法的实现,那么你的类也会具有 CompareTo 方法。

 

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

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

相关文章

K8s 源码剖析及debug实战之 Kube-Scheduler(五):优选算法详解

文章目录 0. 引言1. 回顾2. PrioritizeNodes3. 有哪些优选算法4. selectHost5. 总结6. 参考 0. 引言 欢迎关注本专栏&#xff0c;本专栏主要从 K8s 源码出发&#xff0c;深入理解 K8s 一些组件底层的代码逻辑&#xff0c;同时借助 debug Minikube 来进一步了解 K8s 底层的代码…

【Linux】Linux 基础命令 crontab命令

1.crontab命令 crond 是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务 工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动…

鸿蒙应用中图片的显示(Image组件)

目录 1、加载图片资源 1.1、存档图类型数据源 a.本地资源 b.网络资源 c.Resource资源 d.媒体库file://data/storage e.base64 1.2、多媒体像素图片 2、显示矢量图 3、添加属性 3.1、设置图片缩放类型 3.2、设置图片重复样式 3.3、设置图片渲染模式 3.4、设置图…

Go语言基本数据类型

Go语言基本数据类型 1.整型2.浮点型3.复数4.布尔型5.字符串窥探字符串类型字符串内建函数UTF-8编码字符串处理相关的四个包字符串和数字的转换 6.常量 1.整型 Go语言同时提供了有符号和无符号类型的整数运算。这里有int8、int16、int32和int64四种截然不同大小的有符号整数类型…

基于springboot公租房申请管理系统

开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven…

程序员常用的学习网站有哪些?10大网站整理

1、CSDN -专业IT技术社区&#xff08;https://www.csdn.net/&#xff09; 中国专业IT社区CSDN (Chinese Software Developer Network) 创立于1999年&#xff0c;致力于为中国软件开发者提供知识传播、在线学习、职业发展等全生命周期服务。全力为IT开发者打造分享技术心得、讨…

柯桥小语种学习,留学韩语 生活日常口语 语法

① N이다/A/V/았ㄹ/을지도 모르다 说不定 이미 도착했을 지도 모르니까 전화해 봐요 说不定已经到了&#xff0c;打电话试试 주말에 세일이 있을지도 모르니까 주말에 가 보자 周末说不定会搞活动&#xff0c;我们周末去吧 ② ㄴ/은/는/았었는/ㄹ/을지 모르다 不知道 처음이…

客户回馈机制常用的ChatGPT通用提示词模板

客户回馈计划制定&#xff1a;如何制定客户回馈计划&#xff0c;明确回馈的目标和策略&#xff1f; 回馈方式选择&#xff1a;如何选择合适的回馈方式&#xff0c;如积分、折扣、礼品等&#xff1f; 回馈标准设定&#xff1a;如何设定回馈的标准&#xff0c;确保公平性和合理…

【webstorm中通过附加方式打开一个项目,这个项目本身有git,但是却看不到git的解决方法】

1、如图所示 设置-》版本控制-》未注册的根&#xff0c;选中后&#xff0c;再点加号&#xff0c;就可以了 2、如图所示 版本控制-》直接点加号-》选中项目路径&#xff0c;vcs选择git&#xff0c;点击确定就可以了

Java实战:Swing版记事本

文章目录 一、实战概述二、运行效果三、涉及知识点四、实现步骤(一)创建Java项目(二)准备图片素材(三)存放帮助文件(四)创建包与类1、继承JFrame类2、声明变量3、添加主方法4、编写初始化图形用户界面方法5、编写保存文件方法 - saveFile()6、编写打开文件方法 - openF…

prometheus grafana mysql监控配置使用

文章目录 前传bitnami/mysqld-exporter:0.15.1镜像出现了问题.my.cnf可以用这个"prom/mysqld-exporter:v0.15.0"镜像重要的事情mysql监控效果外传 前传 prometheus grafana的安装使用&#xff1a;https://nanxiang.blog.csdn.net/article/details/135384541 本文说…

一个简易的SpringAOP实例

1、引入依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.…

【电商项目实战】沙箱支付模拟支付功能

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是Java方文山&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的专栏《电商项目实战》。&#x1f3af;&#x1f3af; &am…

芯片SIC8833可开发打气泵方案

无线车载打气泵方案由一块PCBA板集成其所需的功能&#xff0c;其充气原理是发动机通过两根三角带驱动气泵曲轴&#xff0c;进而驱动活塞进行打气&#xff0c;打出的气体通过导气管导入储气筒。另一方面储气筒又通过一根导气管将储气筒内的气体导入固定在气泵上的调压阀内&#…

orangepi 3b安装 miniconda,后安装 opencv-python

参考 https://docs.conda.io/projects/miniconda/en/latest/ 下载miniconda wget https://repo.anaconda.com/miniconda/Miniconda3-py311_23.11.0-2-Linux-aarch64.sh -O ~/miniconda3/miniconda.sh mkdir -p ~/miniconda3 #wget https://repo.anaconda.com/miniconda/Mi…

ClickHouse基础知识(四):ClickHouse 引擎详解

1. 表引擎的使用 表引擎是 ClickHouse 的一大特色。可以说&#xff0c; 表引擎决定了如何存储表的数据。包括&#xff1a; ➢ 数据的存储方式和位置&#xff0c;写到哪里以及从哪里读取数据。 默认存放在/var/lib/clickhouse/data ➢ 支持哪些查询以及如何支持。 ➢ 并发数…

6.vue学习笔记(style绑定+监听器+表单的输入绑定)

文章目录 1.style绑定2.监听器3.表单的输入绑定3.1.复选框3.2.修饰符3.2.1 .lazy 1.style绑定 数据绑定的一个常见需求场景是操纵元素的 CSS style列表&#xff0c;因为style是attribute&#xff0c;我们可以和其他attribute一样使用v-bind将它们和动态字符串绑定。 但是&…

vue-cli创建项目时由esLint校验导致报错或警告的问题及解决

vue-cli创建项目时由esLint校验导致报错或警告的问题及解决 一、万能办法 一、万能办法 //就是在报错的JS文件中第一行写上 /* eslint-disable */链接: https://www.yii666.com/blog/288808.html 其它的方法我遇见了再补充

easycode 插件配置文件

easycode是一个idea生成文件的插件&#xff0c;以下是我的一个项目中配置信息&#xff0c;需要的可以拿走&#xff0c;保存成json文件导入即可 {"author" : "XXX","version" : "1.2.8","userSecure" : "","…

快速搭建知识付费小程序,3分钟即可开启知识变现之旅

产品服务 线上线下课程传播 线上线下活动管理 项目撮合交易 找商机找合作 一对一线下交流 企业文化宣传 企业产品销售 更多服务 实时行业资讯 动态学习交流 分销代理推广 独立知识店铺 覆盖全行业 个人IP打造 独立小程序 私域运营解决方案 公域引流 营销转化 …