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 ...
随机推荐
- [Docker] Run, Stop and Remove Docker Containers
In this lesson, we'll find out the basics of running Docker containers. We'll go over how to downloa ...
- AVR第5课:蜂鸣器
下面是蜂鸣器的电路图. 代码:蜂鸣器代码. <span style="font-size:18px;">/* *info:buzzer *author:chenlu * ...
- Havel-Hakimi定理 hdu2454 / poj1695 Havel-Hakimi定理
Havel-Hakimi定理 当年一度热门出如今ACM赛场上的算法. 算法定义: Havel-Hakimi定理主要用来判定一个给定的序列是否是可图的. 2.首先介绍一下度序列:若把图 G 全部顶点的度 ...
- FAST特征点检测&&KeyPoint类
FAST特征点检测算法由E.Rosten和T.Drummond在2006年在其论文"Machine Learning for High-speed Corner Detection" ...
- 【t009】最大矩形面积
Time Limit: 2 second Memory Limit: 32 MB [问题描述] 在x轴上水平放置着N个矩形,每个矩形都有相同的宽度,但是它们的高度并不相同. 比如,图1包含的矩形的高分 ...
- Android注冊短信验证码功能
一.短信验证的效果是通过使用聚合数据的SDK实现的 ,效果例如以下: 二.依据前一段时间的博客中输了怎么注冊! 注冊之后找到个人中心找到申请一个应用就可以! 三.依据官方文档创建项目 官方文档API下 ...
- [Node.js] Identify memory leaks with nodejs-dashboard
In this lesson, I introduce a memory leak into our node.js application and show you how to identify ...
- 前端Js框架汇总(工具多看)
前端Js框架汇总(工具多看) 一.总结 一句话总结: 二.前端Js框架汇总 概述: 有些日子没有正襟危坐写博客了,互联网飞速发展的时代,技术更新迭代的速度也在加快.看着Java.Js.Swift在各领 ...
- html+css+js实现狼吃羊小游戏
html+css+js实现狼吃羊小游戏 一.总结 一句话总结:给动的元素下标记,这里表现为将要活动的标签动态增加class,这是一种很好的思想. 1.如何实现棋子走动的时候简单精确定位? 用重构坐标系 ...
- Tomcat下ajax请求路径总结
ajax的url有两种,一种是绝对路径,另一种是相对路径. 一.绝对路径:包括协议名称.主机地址.端口.web项目名称等的完整请求路径. 例如: $.ajax({ url:"ht ...