我有一些数据,保存在tlist中,每项是个结构,如何在对一项排序的基础上,继续排序 排序前张三 男 25王婆 女 24李四 男 32王婆2 女 27王二 男 28排序以后张三 男 25王二 男 28李四 男 32王婆 女 24王婆2 女 27 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 想一想,既然你是要排序,那么要排的东西应该可以转换为字符串,既然可以转换为字符串,那么我们就可以通过将所有要排的字段全部转换为字符串之后合并为一个字符串,然后比较这个合并后的字符串进行排序则可给你一个函数 pPeople = ^TPeople; TPeople = packed record Name: string; Sex: string; Age: integer; end;procedure Sort(List: TList;isArc: boolean);var i,j: integer; people,People2,temp: pPeoPle; tempstr1,tempstr2: string;begin for i := 0 to List.Count - 1 do begin for j := i + 1 to List.Count - 1 do begin People := List.Items[i]; tempstr1 := people^.Name + ' ' + people^.Sex + ' ' + inttostr(people^.Age); people2 := List.Items[j]; tempstr2 := people2^.Name +' '+ people2^.Sex + ' ' + inttostr(people2^.Age); if ((isArc) and (CompareStr(tempstr1,tempstr2)>0)) or((not isarc) and (CompareStr(tempstr1,tempstr2)<0))then begin temp := List.Items[i]; List.Items[i] := list.Items[j]; List.Items[j] := temp; end; end; end;end;这个应该就可以实现了。 忘记了说,传递的参数一个是你要排序的List另一个isarc指定是否要递增排序还是要递减排序!正个程序的测试代码如下:unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type pPeople = ^TPeople; TPeople = packed record Name: string; Sex: string; Age: integer; end; TForm1 = class(TForm) Button1: TButton; Memo1: TMemo; Memo2: TMemo; procedure FormCreate(Sender: TObject); function GetPeople(PeopleName,Sex: string;Age: integer): pPeople; procedure Button1Click(Sender: TObject); private { Private declarations } List: TList; //procedure Sort(); procedure FillMem(Memo: Tmemo); public { Public declarations } end;var Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);var People: pPeople;begin List := TList.Create; People := GetPeople('张三','男',25); List.Add(People); People := GetPeople('王婆','女',24); List.Add(People); People := GetPeople('李四','男',32); List.Add(People); People := GetPeople('王婆2','女',45); List.Add(People); People := GetPeople('王二','男',28); List.Add(People); People := GetPeople('测试人','男',22); List.Add(People); People := GetPeople('王婆','女',22); List.Add(People); fillmem(memo1);end;function TForm1.GetPeople(PeopleName, Sex: string; Age: integer): pPeople;var People: pPeople;begin new(People); People^.Name := PeopleName; People^.Sex := Sex; People^.Age := Age; result := People;end;procedure Sort(List: TList;isArc: boolean);var i,j: integer; people,People2,temp: pPeoPle; tempstr1,tempstr2: string;begin for i := 0 to List.Count - 1 do begin for j := i + 1 to List.Count - 1 do begin People := List.Items[i]; tempstr1 := people^.Name + ' ' + people^.Sex + ' ' + inttostr(people^.Age); people2 := List.Items[j]; tempstr2 := people2^.Name +' '+ people2^.Sex + ' ' + inttostr(people2^.Age); if ((isArc) and (CompareStr(tempstr1,tempstr2)>0)) or((not isarc) and (CompareStr(tempstr1,tempstr2)<0))then begin temp := List.Items[i]; List.Items[i] := list.Items[j]; List.Items[j] := temp; end; end; end;end;procedure TForm1.Button1Click(Sender: TObject);var i: integer;begin Sort(List,false); FillMem(memo2);end;procedure TForm1.FillMem(Memo: Tmemo);var i: integer; peo: pPeople;begin memo.Clear; for i := 0 to List.Count - 1 do begin peo := List.Items[i]; memo.Lines.Add(peo^.Name + ' '+peo^.Sex + ' '+ inttostr(peo^.Age)); end;end;end. Orz 最笨的办法是 把这样的数据放 数据库中 order by 一下 如何让任务栏的程序名显示完整? 请教 大数据量的计算速度问题 作了一个数据库程序如何用InstallShield.for.Delphi7进行制作安装程序???? 新手问:如何实现文件覆盖 如果才能知道某个类中在Published处声音的函数或过程? 程序初始的问题 哪位大侠能写一个类,用来操作Excel文件的。 如何让MEMO里的内容实现循环滚动。 论文 如何把电子表格中的数据,自动填入另外软件窗口中 一个老问题,还是没有解决,请帮帮我
给你一个函数 pPeople = ^TPeople;
TPeople = packed record
Name: string;
Sex: string;
Age: integer;
end;
procedure Sort(List: TList;isArc: boolean);
var
i,j: integer;
people,People2,temp: pPeoPle;
tempstr1,tempstr2: string;
begin
for i := 0 to List.Count - 1 do
begin
for j := i + 1 to List.Count - 1 do
begin
People := List.Items[i];
tempstr1 := people^.Name + ' ' + people^.Sex + ' ' + inttostr(people^.Age);
people2 := List.Items[j];
tempstr2 := people2^.Name +' '+ people2^.Sex + ' ' + inttostr(people2^.Age);
if ((isArc) and (CompareStr(tempstr1,tempstr2)>0)) or((not isarc) and (CompareStr(tempstr1,tempstr2)<0))then
begin
temp := List.Items[i];
List.Items[i] := list.Items[j];
List.Items[j] := temp;
end;
end;
end;
end;这个应该就可以实现了。
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
pPeople = ^TPeople;
TPeople = packed record
Name: string;
Sex: string;
Age: integer;
end;
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
Memo2: TMemo;
procedure FormCreate(Sender: TObject);
function GetPeople(PeopleName,Sex: string;Age: integer): pPeople;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
List: TList;
//procedure Sort();
procedure FillMem(Memo: Tmemo);
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
var
People: pPeople;
begin
List := TList.Create; People := GetPeople('张三','男',25);
List.Add(People);
People := GetPeople('王婆','女',24);
List.Add(People);
People := GetPeople('李四','男',32);
List.Add(People);
People := GetPeople('王婆2','女',45);
List.Add(People);
People := GetPeople('王二','男',28);
List.Add(People);
People := GetPeople('测试人','男',22);
List.Add(People); People := GetPeople('王婆','女',22);
List.Add(People); fillmem(memo1);
end;function TForm1.GetPeople(PeopleName, Sex: string; Age: integer): pPeople;
var
People: pPeople;
begin
new(People);
People^.Name := PeopleName;
People^.Sex := Sex;
People^.Age := Age;
result := People;
end;procedure Sort(List: TList;isArc: boolean);
var
i,j: integer;
people,People2,temp: pPeoPle;
tempstr1,tempstr2: string;
begin
for i := 0 to List.Count - 1 do
begin
for j := i + 1 to List.Count - 1 do
begin
People := List.Items[i];
tempstr1 := people^.Name + ' ' + people^.Sex + ' ' + inttostr(people^.Age);
people2 := List.Items[j];
tempstr2 := people2^.Name +' '+ people2^.Sex + ' ' + inttostr(people2^.Age);
if ((isArc) and (CompareStr(tempstr1,tempstr2)>0)) or((not isarc) and (CompareStr(tempstr1,tempstr2)<0))then
begin
temp := List.Items[i];
List.Items[i] := list.Items[j];
List.Items[j] := temp;
end;
end;
end;
end;procedure TForm1.Button1Click(Sender: TObject);
var
i: integer;
begin
Sort(List,false);
FillMem(memo2);
end;procedure TForm1.FillMem(Memo: Tmemo);
var
i: integer;
peo: pPeople;
begin
memo.Clear;
for i := 0 to List.Count - 1 do
begin
peo := List.Items[i];
memo.Lines.Add(peo^.Name + ' '+peo^.Sex + ' '+ inttostr(peo^.Age));
end;
end;end.