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;
interface
uses
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 ...
随机推荐
- Android应用开发按下返回键退向后台执行
转载请注明来源:http://blog.csdn.net/kjunchen/article/details/50429694 Android应用开发按下返回键退向后台执行 我们日常使用的非常多Andr ...
- Android Wear之android穿戴式设备应用开发平台
Android Wear于2014年03月19日公布,并有Moto 360和LG watch两款产品. 眼下源代码还没有开放.可是开发人员能够下载它的Image及相应的开发SDK,这样开发人员通过模拟 ...
- php中foreach源码分析(编译原理)
php中foreach源码分析(编译原理) 一.总结 编译原理(lex and yacc)的知识 二.php中foreach源码分析 foreach是PHP中很常用的一个用作数组循环的控制语句.因为它 ...
- Android自定义组件系列【1】——自定义View及ViewGroup
View类是ViewGroup的父类,ViewGroup具有View的所有特性,ViewGroup主要用来充当View的容器,将其中的View作为自己孩子,并对其进行管理,当然孩子也可以是ViewGr ...
- Mac OSX 下配置 LNMP开发环境
不久前负责了一个项目需要配置PHP7的开发环境,因为之前所有的项目用的是PHP5的,所以研究了这些东西,但是很遗憾,电脑出了问题,不得已重装了系统,然后你懂得...什么都没有了,要重新来过.. 虽然本 ...
- pycharm Zooming in the Editor
https://www.jetbrains.com/help/pycharm/zooming-in-the-editor.html To enable changing font size in th ...
- cors-synchronous-requests-not-working-in-firefox
http://stackoverflow.com/questions/16668386/cors-synchronous-requests-not-working-in-firefox
- 轻松学习JavaScript十八:DOM编程学习之DOM简单介绍
一DOM概述 DOM(文档对象模型)是HTML和XML的应用程序接口(API).DOM将把整个页面规划成由节点层级构成的文档. DOM描绘了一个层次化的节点树,执行开发者加入,移除和改动页面的某一部分 ...
- POJ 3714 Raid(平面近期点对)
解题思路: 分治法求平面近期点对.点分成两部分,加个标记就好了. #include <iostream> #include <cstring> #include <cst ...
- UItextfield 动态限制输入的字数
@property (nonatomic, strong) UITextField *txtName; - (void)viewDidLoad { [super viewDidLoad]; //UIC ...