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;
Pingback: 【Delphi Tips】StringListの要素を文字列の長さでソートする – いぬごや