如何根据 Delphi 中的值对 TStringList 进行排序 7
How to sort a TStringList according to it's values in Delphi 7
我创建了一个包含 name/value 对的 TStringList
,我想根据它的值对 TStringList
进行排序,然后将具有最大值的名称分配给标签。
SL: TStringList;
SL:= TStringList.Create;
SL.Values['chelsea']:= '5';
SL.Values['Liverpool']:= '15';
SL.Values['Mancity']:= '10';
SL.Values['Tot']:= '0';
SL.Values['Manunited']:= '20';
最后这个 TStringList
必须按照值排序。实际上名字必须是具有最高价值的名字。
您可以使用 CustomSort
方法执行此操作。像这样:
{$APPTYPE CONSOLE}
uses
SysUtils, Classes;
function StringListSortProc(List: TStringList; Index1, Index2: Integer): Integer;
var
i1, i2: Integer;
begin
i1 := StrToInt(List.ValueFromIndex[Index1]);
i2 := StrToInt(List.ValueFromIndex[Index2]);
Result := i2 - i1;
end;
var
SL: TStringList;
Index: Integer;
begin
SL := TStringList.Create;
try
SL.Values['Chelsea'] := '5';
SL.Values['Liverpool'] := '15';
SL.Values['Man City'] := '10';
SL.Values['Spurs'] := '0';
SL.Values['Man United'] := '20';
WriteLn('Before sort');
for Index := 0 to SL.Count-1 do
WriteLn(' ' + SL[Index]);
SL.CustomSort(StringListSortProc);
WriteLn;
WriteLn('After sort');
for Index := 0 to SL.Count-1 do
WriteLn(' ' + SL[Index]);
finally
SL.Free;
end;
ReadLn;
end.
不记得是什么时候添加的ValueFromIndex
方法了。如果它不在 Delphi 7 中,那么您可以像这样模拟它:
function ValueFromIndex(List: TStringList; Index: Integer): string;
var
Item: string;
begin
Item := List[Index];
Result := Copy(Item, Pos('=', Item) + 1, MaxInt);
end;
function StringListSortProc(List: TStringList; Index1, Index2: Integer): Integer;
var
i1, i2: Integer;
begin
i1 := StrToInt(ValueFromIndex(List, Index1));
i2 := StrToInt(ValueFromIndex(List, Index2));
Result := i2 - i1;
end;
程序输出:
Before sort
Chelsea=5
Liverpool=15
Man City=10
Spurs=0
Man United=20
After sort
Man United=20
Liverpool=15
Man City=10
Chelsea=5
Spurs=0
我创建了一个包含 name/value 对的 TStringList
,我想根据它的值对 TStringList
进行排序,然后将具有最大值的名称分配给标签。
SL: TStringList;
SL:= TStringList.Create;
SL.Values['chelsea']:= '5';
SL.Values['Liverpool']:= '15';
SL.Values['Mancity']:= '10';
SL.Values['Tot']:= '0';
SL.Values['Manunited']:= '20';
最后这个 TStringList
必须按照值排序。实际上名字必须是具有最高价值的名字。
您可以使用 CustomSort
方法执行此操作。像这样:
{$APPTYPE CONSOLE}
uses
SysUtils, Classes;
function StringListSortProc(List: TStringList; Index1, Index2: Integer): Integer;
var
i1, i2: Integer;
begin
i1 := StrToInt(List.ValueFromIndex[Index1]);
i2 := StrToInt(List.ValueFromIndex[Index2]);
Result := i2 - i1;
end;
var
SL: TStringList;
Index: Integer;
begin
SL := TStringList.Create;
try
SL.Values['Chelsea'] := '5';
SL.Values['Liverpool'] := '15';
SL.Values['Man City'] := '10';
SL.Values['Spurs'] := '0';
SL.Values['Man United'] := '20';
WriteLn('Before sort');
for Index := 0 to SL.Count-1 do
WriteLn(' ' + SL[Index]);
SL.CustomSort(StringListSortProc);
WriteLn;
WriteLn('After sort');
for Index := 0 to SL.Count-1 do
WriteLn(' ' + SL[Index]);
finally
SL.Free;
end;
ReadLn;
end.
不记得是什么时候添加的ValueFromIndex
方法了。如果它不在 Delphi 7 中,那么您可以像这样模拟它:
function ValueFromIndex(List: TStringList; Index: Integer): string;
var
Item: string;
begin
Item := List[Index];
Result := Copy(Item, Pos('=', Item) + 1, MaxInt);
end;
function StringListSortProc(List: TStringList; Index1, Index2: Integer): Integer;
var
i1, i2: Integer;
begin
i1 := StrToInt(ValueFromIndex(List, Index1));
i2 := StrToInt(ValueFromIndex(List, Index2));
Result := i2 - i1;
end;
程序输出:
Before sort Chelsea=5 Liverpool=15 Man City=10 Spurs=0 Man United=20 After sort Man United=20 Liverpool=15 Man City=10 Chelsea=5 Spurs=0