DELPHI7中 TObjectList sort排序问题
网上收集了一点东西
TOBJECTLIST里,有自带的排序功能
TLIST,TSTRINGLIST也有,MS是一样的
SORT里有一个参数: Compare:TListSortCompare
那我们先了解一下 TListSortCompare type
HELP原文:TListSortCompare is the type for callbacks that compare two items in a list.
即 TListSortCompare 是一个比较两个列表项的的回调类型
不知道这么翻译行不行,但意思就是返回一个值来表示LIST中两项的大小
定义:(这个传入的是两项的指针)
type TListSortCompare = function (Item1, Item2: Pointer): Integer;
Value Description
> 0 (positive) Item1 is less than Item2
0 Item1 is equal to Item2
< 0 (negative) Item1 is greater than Item2
于是我们可以定义一个比较函数去定义自己的比较方式
function (Item1, Item2: Pointer): Integer
对于delphi初学者 不懂 item1 和 item2 是什么意思
自己的理解,这是一个对象的指针,就是TOBJECTLIST自己
好比类中套了TOBJECTLIST 那么 怎么来写这个函数呢
网上的高手很厉害,一般不会回答傻问题,可惜我们小白不懂啊!
上代码
function CompareNames(Item1, Item2: Pointer): Integer;
begin
result := Integer(CompareValue(TThingItem(Item1).indexShow,TThingItem(Item2).indexShow));
end;
CompareValue 记得U一下Math
这个函数头一回用 贴上解释吧
7、CompareValue
function CompareValue (const A, B: Extended; Epsilon: Extended = 0): TValueRelationship; overload;
function CompareValue (const A, B: Double; Epsilon: Double = 0): TValueRelationship; overload;
function CompareValue (const A, B: Single; Epsilon: Single = 0): TValueRelationship; overload;
function CompareValue (const A, B: Integer): TValueRelationship; overload;
function CompareValue (const A, B: Int64): TValueRelationship; overload;
uses Math
比较两个值之间的关系
如 A 小于 B 则返回 -1 ,如果相等则为 0 ,如果 A>B 则返回为 1;
好了,上面TThingItem是一个对象,Item1是要表示的TOBJECTLIST,至少我是这么理解的
这里的作用是比较indexshow的大小来达到从小到大的排序!
函数直接添加,无需申明
下面直接调用!排序OK
self.tolWPXM.Sort(@CompareNames);
贴段别人弄好的测试代码开始不懂,后来完全明白是什么了
unit Unit1;
interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Math;type P_MissInfo = ^MissInfo; MissInfo = record Missqty: integer; MissRate: Double; end; TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form1: TForm1;implementation{$R *.dfm}function CompareNames(Item1, Item2: Pointer): Integer;begin result := Integer(CompareValue(P_MissInfo(Item1).MissRate, P_MissInfo(Item2).MissRate));end;procedure TForm1.Button1Click(Sender: TObject);var list: Tlist; PMissInfo: P_MissInfo;begin list := Tlist.create; New(PMissInfo); PMissInfo.Missqty:= 10; PMissInfo.MissRate:= 12.56; list.Add(PMissInfo); New(PMissInfo); PMissInfo.Missqty:= 12; PMissInfo.MissRate:= 12.8; list.Add(PMissInfo); New(PMissInfo); PMissInfo.Missqty:= 9; PMissInfo.MissRate:= 11.56; list.Add(PMissInfo); list.Sort(@CompareNames); Showmessage(IntToStr(list.Count)); showmessage(FloatToStr(P_MissInfo(list.Items[0]).MissRate)); showmessage(FloatToStr(P_MissInfo(list.Items[1]).MissRate)); showmessage(FloatToStr(P_MissInfo(list.Items[2]).MissRate));end;end.DELPHI7中 TObjectList sort排序问题的更多相关文章
- 关于layui中tablle 渲染数据后 sort排序问题
最近在使用easyweb框架做后台管理,案例可见https://gitee.com/whvse/EasyWeb. 其中遇到了 sort排序问题, html代码:<table class=&quo ...
- @NamedEntityGraphs --JPA按实体类对象参数中的字段排序问题得解决方法
JPA按实体类对象参数中的字段排序问题得解决方法@Entity @Table(name="complaints") @NamedEntityGraphs({ @NamedEntit ...
- Java开发中使用sort排序
Java开发中使用sort排序 BaiduSpring https://baijiahao.baidu.com/s?id=1625440912158830354&wfr=spider& ...
- Delphi7中编译提示“Unsafe type 'PChar'”的原因及处理办法
delphi7中加入了对.net的支持 在.net中是没有指针的(托管环境中),所以指针都是不安全的,不符合.net规范 所以d7里有警告,可以不管它 DELPHI7已经考虑到了移植到点NET的问题, ...
- 【转载】C#中自定义Sort的排序规则IComparable接口
C#中的List集合在排序的时候,如果不使用Lambda表达式进行排序的话,一般调用Sort()方法进行排序,如果希望Sort()方法排序后的结果跟我们预想的效果一致或者按照我们自定义的规则排序,则需 ...
- python中的sort方法
Python中的sort()方法用于数组排序,本文以实例形式对此加以详细说明: 一.基本形式 列表有自己的sort方法,其对列表进行原址排序,既然是原址排序,那显然元组不可能拥有这种方法,因为元组是不 ...
- python中的sort方法使用详解
Python中的sort()方法用于数组排序,本文以实例形式对此加以详细说明: 一.基本形式 列表有自己的sort方法,其对列表进行原址排序,既然是原址排序,那显然元组不可能拥有这种方法,因为元组是不 ...
- Delphi7 中使用FastMM 转载
http://blog.csdn.net/cai5/article/details/17142697 Delphi7 中使用FastMM 在工程的第一行引用FastMM4即可(注意,一定要在第一个Us ...
- Delphi7中的Char和XE中的Char
我用FillChar()函数时,发现两个版本中的Char不一样. 在delphi7中 procedure TForm2.Button1Click(Sender: TObject); var s: ar ...
随机推荐
- ENVI显示GDAL创建GeoTiff文件的一个问题及其思考
作者:朱金灿 来源:http://blog.csdn.net/clever101 使用gdal创建一个100*100的红色的geotiff图像,代码如下: #include <assert.h& ...
- 编译nodejs及其源代码研究
本文将从 源代码 研究nodejs 的原理.本质,探讨nodejs的应用场景,以及高性能开发实践指南. 文件夹: 第一节:编译node.js 第二节:源代码分析 进入主题:下面是在win7 64 下进 ...
- 【t049】&&【u001】足球
Time Limit: 1 second Memory Limit: 128 MB [问题描述] 我们当中有很多热爱中国足球的同学,我们都知道中超(中国足球超级联赛)的规则: 一场比赛中,若获胜(即你 ...
- zxing的使用及优化
二维码介绍 zxing项目是谷歌推出的用来识别多种格式条形码的开源项目,项目地址为https://github.com/zxing/zxing,zxing有多个人在维护,覆盖主流编程语言,也是目前还在 ...
- Linux删除非空目录
Linux下如何删除非空目录 这个问题很basic,不过还是困扰了我一段时间.(这里主要讨论的是命令行模式下)我本来觉得应该使用命令 rmdir但是发现它无法删除非空的目录.后来发现了原来应该使用 ...
- [NPM] Create a node script to replace a complex npm script
In this lesson we will look at pulling out complex npm script logic into an external JavaScript file ...
- 【Material Design视觉设计语言】开篇
作者:郭孝星 微博:郭孝星的新浪微博 邮箱:allenwells@163.com 博客:http://blog.csdn.net/allenwells Github:https://github.co ...
- WPF入门(三)->几何图形之线条(LineGeometry)
原文:WPF入门(三)->几何图形之线条(LineGeometry) 前一章我们对wpf的xaml语言有了一定的了解,那么我们现在开始来学习如何使用wpf来画出几何图形. LineGeometr ...
- mysql 下 计算 两点 经纬度 之间的距离 计算结果排序
根据经纬度计算距离公式 公式 对上面的公式解释如下: Lung1 Lat1表示A点经纬度, Lung2 Lat2表示B点经纬度: a=Lat1 – Lat2 为两点纬度之差 b=Lung1 -Lung ...
- JVM调优之Tomcat启动参数配置及详解
开发项目中会遇到Tomcat内存溢出(java.lang.OutOfMemoryError: PermGen space)的问题,通过查找资料找到是通过设置Tomcat 启动堆空间大小.年轻代大小.每 ...