TList中Sort如何用?(200分)

  • 主题发起人 主题发起人 cxygzm
  • 开始时间 开始时间
C

cxygzm

Unregistered / Unconfirmed
GUEST, unregistred user!
我用Tlist来实现链表,对TList的Sort调用时,不知如何正确的用法,希望有哪位大侠
不吝赐教,谢谢! cxygzm@gz139.com.cn
 
假设你的LIST中保存的整形指针

Function softTlist(item1,item2:pointer):integer;
begin
if Pinteger(item1)^>pinteger(item2)^ then
result:= -1
else
result :=1;
end;

var
a:tlist;

a.soft(softlist);

OK!
 
如果列表中的值为数值型,先声明如下函数
function ListSort(iP1, iP2: PInteger):Integer;
begin
if iP1^ > iP2 then
result := 1
else if iP1^ = iP2 then
Result := 0
else
Result := -1;
end;

然后调用为:列表名.sort(ListSort)
 
如果列表中的值为数值型,先声明如下函数
function ListSort(iP1, iP2: Pointer):Integer;
begin
if PInteger(iP1)^ > PInteger(iP2)^ then
result := 1
else if PInteger(iP1)^ > PInteger(iP2)^ then
Result := 0
else
Result := -1;
end;

然后调用为:列表名.sort(ListSort)
 
我用过这种方法,但在列表名.Sort调用时,参数是TListSortCompare,函数的返回值是
Integer类型,在调用时参数出错,系统认为是参数类型不兼容,请问如何解决?
 
多人接受答案了。
 
这是一个完整的例子,如果还不行再来问我

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

function ListSort(iP1, iP2: Pointer):Integer;
begin
if PInteger(iP1)^ > PInteger(iP2)^ then
Result := 1
else if PInteger(iP1)^ = PInteger(iP2)^ then
Result := 0
else
Result := -1;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
lInt: TList;
iP: PInteger;
procedure showlist;
var
i: Integer;
p: PInteger;
begin
for i := 0 to lInt.Count - 1 do
begin
p := lInt.Items;
ShowMessage(IntToStr(p^));
end;
end;
begin
lInt := TList.Create;
new(iP);
iP^ := 3;
lInt.Add(iP);
New(iP);
iP^ := 1;
lInt.Add(iP);
New(iP);
iP^ := 2;
lInt.Add(iP);
lInt.Sort(ListSort);
showlist;
end;

end.
 
后退
顶部