排序前
张三 男  25
王婆 女  24
李四 男  32
王婆2 女 27
王二 男  28排序以后
张三 男  25
王二 男  28
李四 男  32
王婆 女  24
王婆2 女 27

解决方案 »

  1.   

    想一想,既然你是要排序,那么要排的东西应该可以转换为字符串,既然可以转换为字符串,那么我们就可以通过将所有要排的字段全部转换为字符串之后合并为一个字符串,然后比较这个合并后的字符串进行排序则可
    给你一个函数  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;这个应该就可以实现了。
      

  2.   

    忘记了说,传递的参数一个是你要排序的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.
      

  3.   

    Orz 最笨的办法是 把这样的数据放 数据库中 order by 一下