如何根据delphi 7中的值对TStringList进行排序

问题描述 投票:1回答:1

我在Delphi7]中创建一个TStringList(包含名称/值对),我想根据其值对TStringList进行排序,然后将具有最大值的名称分配给Labels。

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必须根据值进行排序。实际上,名字必须是具有最高值的名字。>>>>在Delphi7

] >>中

非常感谢!

我在Delphi7中创建了一个TStringList(包含名称/值对),我想根据其值对TStringList进行排序,然后将具有最大值的名称分配给Labels。 SL:TStringList; SL:= ...

delphi delphi-7
1个回答
0
投票

您可以使用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.
© www.soinside.com 2019 - 2024. All rights reserved.