网上收集了一点东西

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排序问题的更多相关文章

  1. 关于layui中tablle 渲染数据后 sort排序问题

    最近在使用easyweb框架做后台管理,案例可见https://gitee.com/whvse/EasyWeb. 其中遇到了 sort排序问题, html代码:<table class=&quo ...

  2. @NamedEntityGraphs --JPA按实体类对象参数中的字段排序问题得解决方法

    JPA按实体类对象参数中的字段排序问题得解决方法@Entity @Table(name="complaints") @NamedEntityGraphs({ @NamedEntit ...

  3. Java开发中使用sort排序

    Java开发中使用sort排序 BaiduSpring https://baijiahao.baidu.com/s?id=1625440912158830354&wfr=spider& ...

  4. Delphi7中编译提示“Unsafe type 'PChar'”的原因及处理办法

    delphi7中加入了对.net的支持 在.net中是没有指针的(托管环境中),所以指针都是不安全的,不符合.net规范 所以d7里有警告,可以不管它 DELPHI7已经考虑到了移植到点NET的问题, ...

  5. 【转载】C#中自定义Sort的排序规则IComparable接口

    C#中的List集合在排序的时候,如果不使用Lambda表达式进行排序的话,一般调用Sort()方法进行排序,如果希望Sort()方法排序后的结果跟我们预想的效果一致或者按照我们自定义的规则排序,则需 ...

  6. python中的sort方法

    Python中的sort()方法用于数组排序,本文以实例形式对此加以详细说明: 一.基本形式 列表有自己的sort方法,其对列表进行原址排序,既然是原址排序,那显然元组不可能拥有这种方法,因为元组是不 ...

  7. python中的sort方法使用详解

    Python中的sort()方法用于数组排序,本文以实例形式对此加以详细说明: 一.基本形式 列表有自己的sort方法,其对列表进行原址排序,既然是原址排序,那显然元组不可能拥有这种方法,因为元组是不 ...

  8. Delphi7 中使用FastMM 转载

    http://blog.csdn.net/cai5/article/details/17142697 Delphi7 中使用FastMM 在工程的第一行引用FastMM4即可(注意,一定要在第一个Us ...

  9. Delphi7中的Char和XE中的Char

    我用FillChar()函数时,发现两个版本中的Char不一样. 在delphi7中 procedure TForm2.Button1Click(Sender: TObject); var s: ar ...

随机推荐

  1. php实现 字符串加密(分类分布分工,化不可能为可能)

    php实现  字符串加密(分类分布分工,化不可能为可能) 一.总结 一句话总结:谋而后动,加先伪代码,在带函数逻辑,在函数的方式可以极大的避免错误和降低难度.不然这个题目乎出现各种乱七八糟的错误. 1 ...

  2. 手机浏览器 input 输入框 数字

    其实很简单了啦 type="tel"就行了呢 如果是type="number"其实不好用

  3. jquery或js 获取url参数

    <script type="text/javascript"> function getUrlParam(name) { var reg = new RegExp(&q ...

  4. Windows Phone 8.1 后台任务

    Windows Phone 8.1 应用可以添加多个后台任务,以辅助应用完成某些任务. (1)新建前台应用 后台任务是依托于前台应用的,所以必须拥有一个前台应用. 该前台应用的功能很简单,就是读取文件 ...

  5. POST提交数据时四种常见的数据格式

    最近项目部署到新环境tomcat+mysql,想看看项目部署成功没有,就用soupui调对应接口开测试,soupui使用比较简单,给上接口地址,入参xml报文,把入参的media Type设置为app ...

  6. Shuttle ESB(三)——架构模型介绍(2)

    上一篇文章中,介绍了Shuttle ESB架构模型中的三个重要部分. 今天,我们继续介绍剩余的三个内容:模式和消息路由. 四.模式 Request/Response(请求/响应模式) 对基于Reque ...

  7. Kinect小小玩偶游戏----小小潜水员

    本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接: http://blog.csdn.net/cartzhang/article/details/44939887 作者:ca ...

  8. PEM_密钥对生成与读取方法

    PS:欢迎转载,但请注明出处,谢谢配合. 前言: PEM是OpenSSL和许多其他SSL工具的标准格式,OpenSSL 使用PEM 文件格式存储证书和密钥.这种格式被设计用来安全的包含在ascii甚至 ...

  9. thinkphp5多级控制器是什么?怎么使用?

    thinkphp5多级控制器是什么?怎么使用? 一.总结 1.多级控制器是让控制器的级数变成多级,也就是controller目录下可以新建其它目录. 2.使用的话注意目录下的控制的的命名空间(加上目录 ...

  10. Java中的浮点数-科学计数法-加减乘除

    上次,提到"元转分"这个浮点数问题,boss倾向于手动把1.23元这种格式,转换成123分.    但实际上,浮点数很容易遇到精度问题.    比如,System.out.prin ...