我尝试对名称部分的TStringList进行排序。为此,我使用customSort方法。
我给你看一个小例子:
function CompareString(List : TStringList; Index1, Index2 : integer) : integer;
begin
result := AnsiCompareText(List.Names[Index1], List.Names[Index2]);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Memo2.Clear;
Liste.CustomSort(CompareString);
Memo2.Lines.Append(Liste.GetText)
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Liste := TStringList.Create;
Liste.Append('INFOS_NEGOCE=NUM_CDE');
Liste.Append('INFOS_NEGOCE=DATE_CDE');
Liste.Append('INFOS_NEGOCE=NOM_REPERTOIRE_ENT');
Liste.Append('INFOS_NEGOCE=NOM_CONTACT');
Memo1.Lines.Clear;
Memo1.Lines.Append(Liste.GetText)
end;排序结果如下:
INFOS_NEGOCE=NOM_REPERTOIRE_ENT
INFOS_NEGOCE=NOM_CONTACT
INFOS_NEGOCE=NUM_CDE
INFOS_NEGOCE=DATE_CDE我认为排序不会改变行的顺序(名称始终是INFOF_NEGOCE)。
发布于 2014-02-04 23:50:04
排序是使用QuickSort完成的。这意味着相同项的顺序(如排序所示)是未定义的。
请参阅Quicksort - Repeated Elements
发布于 2014-02-05 00:03:00
function CompareString(List : TStringList; Index1, Index2 : integer) : integer;
begin
Result := AnsiCompareText(List.Names[Index1], List.Names[Index2]);
// If you want to sort equal strings then on the Values
if Result = 0 then Result := AnsiCompareText(List.ValueFromIndex[Index1], List.ValueFromIndex[Index2]);
// Or if you want to keep the original order
{ if Result = 0 then Result := Index1-Index2; --- qv : this won't work!}
end;如果Names相等,您的代码会将Result设置为0。如果它们相等,请选择要用来对具有相同名称的项进行排序的其他条件。
正如乌维·拉贝所观察到的那样,“原始顺序”不会起作用。
但并不是所有的东西都丢失了。通常,不使用包含在Tstringlist列表中的对象。如果它可用,那么就在排序之前,尝试
for i := 0 to pred(List.Count) do List.Objects[i] := TObject(i);排序就变成了
function CompareString(List : TStringList; Index1, Index2 : integer) : integer;
begin
Result := AnsiCompareText(List.Names[Index1], List.Names[Index2]);
// If you want to sort equal strings then on the Values
if Result = 0 then Result := AnsiCompareText(List.ValueFromIndex[Index1], List.ValueFromIndex[Index2]);
// Or if you want to keep the original order
if Result = 0 then Result := integer(List.Objects[Index1])-integer(List.Objects[Index2]);
end;但是,如果让我们知道“正确”的顺序应该是什么,事情会容易得多。
https://stackoverflow.com/questions/21556771
复制相似问题