TStringList.Sort 는 일반적인 문자열 정렬이다.

다음과 같이 생성된 리스트를 Sort 메소드로 정렬하면,

StringList.Add('B');
StringList.Add('a');
StringList.Add('A');
StringList.Add('1');


다음과 같은 결과가 나온다. (옵션에 따라 다양하게 선택할 수는 있다)

1
a
A
B






하지만 일반적 문자열 정렬말고 다른 방법으로 정렬하고 싶다면 CustomSort를 이용해야 한다.

다음은 문자열 길이가 긴 순으로 정렬시키는 예제이다.

function StringLengthCompare(List: TStringList; Index1, Index2: Integer): Integer;
var
  Len1, Len2: Integer;
begin
  Len1:=Length(List[Index1]);
  Len2:=Length(List[Index2]);

  if Len1>Len2 then Result:=-1
  else if Len1<Len2 then Result:=1
  else Result:=0;
end;



procedure TForm1.Button1Click(Sender: TObject);
var
  sList: TStringList;
begin
  sList:=TStringList.Create;
  try
    sList.Add('1');
    sList.Add('B');
    sList.Add('a');
    sList.Add('A');
    sList.Add('22');
    sList.Add('333');
    sList.Add('4444');
    sList.Add('5555');
    sList.CustomSort(StringLengthCompare);
    OutputDebugString(PWideChar(sList.Text));
  finally
    FreeAndNil(sList);
  end;
end;

// 결과는 다음과 같음
{
4444
5555
333
22
B
1
A
a
}








Posted by bloodguy
,