delphi TStringlist自定义排序  
官方Delphi 学习QQ群: 682628230(三千人)\n
频道

delphi TStringlist自定义排序


TStringlist顾名思义就是字符串列表,一般用来存储字符串,当然也可以用来存储对象类型,是delphi开发中经常使用的一个类,关于它的详细用法可以参看万一老师的博客,下面主要是记录我在使用中碰到的一个问题,一下是一段代码。

program StringlistCmp;


 {$APPTYPE CONSOLE}


 uses
   SysUtils,
   Classes;


 function Cmp(List: TStringList; Index1, Index2: Integer): Integer;
    begin
    if StrToint(List[index1])       result:=-1
    else if StrToint(List[index1])=StrToint(List[Index2]) then
      Result:=0
    else
      Result:=1;
    end;


 var
   alist:TStringList;
 begin
   alist:=TStringlist.Create;
   alist.DelimitedText:='30,10,50';
   alist.Sorted:=True;       
   Writeln(alist.DelimitedText);  
   //利用默认排序方法 效果良好

  alist.DelimitedText:='10,3,9';
   Writeln(alist.DelimitedText);
  // 没效果,怎么不是按照 3,9,10显示

  //使用自定义的排序方法,解决问题
  alist.Sorted:=False;
   alist.CustomSort(Cmp);
   Writeln(alist.DelimitedText);
   readln;
 end.



第一次使用默认排序,显示的效果良好,第二次却不是想要的效果,查看delphi源码

当设置sorted后会执行一下方法



接着会执行一下方法







首次执行时sorted为false,故会执行QuickSort方法,QuickSort方法会调用传入的Compare




当没有传入自定义的比较方法时就会执行




可以看到,是执行ascii比较,即根据ascii码值作比较,这样上例中字符串10就比字符串3小,故不是delphi的TStringlist提供的sorted属性的问题

当把sorted设为false,并传入自定义的Cmp方法时,跟踪代码会发现程序就会执行我们传入的自定义的比较方法,这样就可以根据需求灵活定制自己的比较了。




关于TStringlist的用法还有许多,以后有用到再记录。


推荐分享
图文皆来源于网络,内容仅做公益性分享,版权归原作者所有,如有侵权请告知删除!
 

Copyright © 2014 DelphiW.com 开发 源码 文档 技巧 All Rights Reserved
晋ICP备14006235号-8 晋公网安备 14108102000087号

执行时间: 0.042480230331421 seconds