TStringList.Sort 는 일반적인 문자열 정렬이다.
다음과 같이 생성된 리스트를 Sort 메소드로 정렬하면,
StringList.Add('B');
StringList.Add('a');
StringList.Add('A');
StringList.Add('1');
StringList.Add('a');
StringList.Add('A');
StringList.Add('1');
다음과 같은 결과가 나온다. (옵션에 따라 다양하게 선택할 수는 있다)
1
a
A
B
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
}
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
}
'Delphi' 카테고리의 다른 글
[Delphi] 윈도우 다시 그리기 (0) | 2010.06.01 |
---|---|
[Delphi] DLL Injection (CreateRemoteThread) (2) | 2010.05.31 |
[Delphi] 문자가 배열에 속하는지 비교 (0) | 2010.05.24 |
[Delphi] Memory leak - TThemeServices (0) | 2010.05.18 |
[Delphi] UTF-8 인코딩 파일 읽기 (0) | 2010.05.18 |