网上收集了一点东西

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. ios开发网络学习十二:NSURLSession实现文件上传

    #import "ViewController.h" // ----WebKitFormBoundaryvMI3CAV0sGUtL8tr #define Kboundary @&q ...

  2. want cry -- 137,139,445

    通过wireshark抓包发现smb的请求报文,目的端口为445,没有应答报文 之前设置了“阻止连接”导致smb访问被拒绝.修改为要求对连接进行加密 就可以访问

  3. 【u016】无序字母对

    Time Limit: 1 second Memory Limit: 128 MB [问题描述] 给定n个各不相同的无序字母对(区分大小写,无序即字母对中的两个字母可以位置颠倒).请构造一个有n+1个 ...

  4. [Grid Layout] Specify a grid gutter size with grid-gap

    It’s beautifully straightforward to add a gutter to our grid layout. Let’s apply one with grid-gap.

  5. C++对象模型——对象成员的效率 (Object Member Efficiency)(第三章)

    3.5 对象成员的效率 (Object Mem ber Efficiency) 以下某个測试,目的在測试聚合(aggregation).封装(encapsulation),以及继承(Inheritan ...

  6. protobuf入门教程

    1.简介和安装 2.消息类型 3.proto3 与 proto2 的区别 4.常用序列化/反序列化接口 5.repeated限定修饰符 6.枚举(enum).包(package) 7.导入定义(imp ...

  7. 后台报错java.lang.IllegalArgumentException: Invalid character found in the request target.

    报错: Note: further occurrences of HTTP header parsing errors will be logged at DEBUG level. java.lang ...

  8. linux 登录windows跳板机

    rdesktop -u 用户 -p 密码 ip -r sound:on/off -g 1200:830

  9. Graphics processing architecture employing a unified shader

    FIELD OF THE INVENTION The present invention generally relates to graphics processors and, more part ...

  10. TensorFlow: couldn’t open CUDA library cupti64_80.dll、InternalError: Blas SGEMM launch failed

    1. couldn't open CUDA library cupti64_80.dll Win10 TensorFlow(gpu)安装详解 在资源管理器中查询 cupti64_80.dll 的位置. ...