本人在TList中增加N个对象。给对象为
  
T my = class(tobject)
  name: string;
  age: string;
  constructor create;
  destructor destroy; override;
end;
  .......
list.add(my)
.....za在加了N个my对象后,我想根据需要,让list以name,或者age排序,可是这个list.sort()怎么那么难用啊。谁救救我啊???

解决方案 »

  1.   

    基本类似下面的写法:
    function CompareNames(Item1, Item2: Pointer): Integer;
    begin
        Result := CompareText((Item1 as my).Name, (Item2 as my).Name);
    end;function CompareAge(Item1, Item2: Pointer): Integer;
    begin
        Result := CompareText((Item1 as my).age, (Item2 as my).age);
    end;procedure TForm1.BitBtn1Click(Sender: TObject);
    begin
        List1.Sort(@CompareNames);//按照姓名排列
        List1.Sort(@CompareAge);///按照年龄排列
    end;
      

  2.   

    需要自己实现的
    Sort带比较用的函数入口
    function CompareD(Item1, Item2: Pointer): Integer;
    begin
      Result := ...比较过程
    end;Sort(@CompareD)就是这样具体看Help的
      

  3.   

    to: gzmhero(hihihi) 
    是不是TList也得从新写啊?
      

  4.   

    不用
    就用系统自己提供的类TList。
      

  5.   

    你的意思是我只需要编写
    function CompareNames(Item1, Item2: Pointer): Integer;
    begin
        Result := CompareText((Item1 as my).Name, (Item2 as my).Name);
    end;function CompareAge(Item1, Item2: Pointer): Integer;
    begin
        Result := CompareText((Item1 as my).age, (Item2 as my).age);
    end;
    把这两个写上就可以了?
      

  6.   

    是的。
    使用的时候下面这样
    List1.Sort(@CompareNames);//按照姓名排列
        
    List1.Sort(@CompareAge);///按照年龄排列