TStringListの要素を文字列の長さでソートする

DelphiのTStringListには、リスト内の文字列を昇順でソートするSortメソッドの他に、任意の条件でソートするCustomSortメソッドがあります。
TStringListのCustomSortメソッドを使って、文字列の長さでソートする方法を紹介します。

CustomSortメソッドは引数にTStringListSortCompare型の関数をとります。
TStringListSortCompare型は次のように定義されています。

TStringListSortCompare = function(List: TStringList; Index1, Index2: Integer): Integer;

TStringListSortCompare型の文字列の長さを比較する関数を作成します。

function StringLengthCompare(List: TStringList; Index1, Index2: Integer): Integer;
begin
  Result := List[Index1].Length - List[Index2].Length;
end;

TStringListのCustomSortメソッドの引数にこの関数を渡すと、文字列の長さ順にソートします。

次のサンプルアプリケーションでは、ボタンを押すとTStringListの文字列をソートして結果をメモに表示します。

フォームにTButtonとTMemoを配置します。
ボタンを押すと、ソート結果を表示します。

function StringLengthCompare(List: TStringList; Index1, Index2: Integer): Integer;
begin
  Result := List[Index1].Length - List[Index2].Length;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  stli: TStringList;
begin
  stli := TStringList.Create;

  // お試しデータ格納
  stli.Add('aa');
  stli.Add('a');
  stli.Add('aaaaa');
  stli.Add('aaaa');
  stli.Add('aaa');

  stli.CustomSort(StringLengthCompare);
  Memo1.Text := stli.Text;

  stli.Free;
end;

sort01

コメント

  1. Pingback: 【Delphi Tips】StringListの要素を文字列の長さでソートする – いぬごや

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です