本文整理自网络,侵删。
TStringlist顾名思义就是字符串列表,一般用来存储字符串,当然也可以用来存储对象类型,是delphi开发中经常使用的一个类,关于它的详细用法可以参看万一老师的博客,下面主要是记录我在使用中碰到的一个问题,一下是一段代码。
program StringlistCmp;
{$APPTYPE CONSOLE}
uses
SysUtils,
Classes;
function Cmp(List: TStringList; Index1, Index2: Integer): Integer;
begin
if StrToint(List[index1])<StrToint(List[Index2]) then
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的用法还有许多,以后有用到再记录。
相关阅读 >>
Delphi xe datasnap服务器获取客户端ip地址
Delphi获取其他进程中listbox和combobox的内容
更多相关阅读请进入《Delphi》频道 >>