5
我想按特定的順序對TStringList進行排序。Delphi中的非字母排序
而不是A,B,C ..我試圖命令它在B,C,A。
我已經用我需要的順序聲明瞭一個const數組。
我試過用CustomSorte,但我不明白如何編寫函數。
我正在嘗試for循環現在,但它會變得非常困難和混亂!
我不是德爾菲專家...
謝謝你們提前!
我想按特定的順序對TStringList進行排序。Delphi中的非字母排序
而不是A,B,C ..我試圖命令它在B,C,A。
我已經用我需要的順序聲明瞭一個const數組。
我試過用CustomSorte,但我不明白如何編寫函數。
我正在嘗試for循環現在,但它會變得非常困難和混亂!
我不是德爾菲專家...
謝謝你們提前!
大約從TStringListSortCompare
函數類型的幫助:
指數1和索引2在列表中的項目進行比較的指標。 回調回報:
- 的值小於0,如果通過索引1標識字符串來通過索引2
- 標識爲0如果兩個字符串是相等
- 值大於0,如果該字符串的字符串之前Index1跟在由Index2標識的字符串後面。
所以,如果你減去從第一個自定義的順序中的第二項的自定義命令,那麼項目就會像你想要的排序。
const
Order: array[0..6] of String = ('B', 'C', 'A', 'D', 'G', 'F', 'E');
function GetStringOrder(const S: String; CaseSensitive: Boolean): Integer;
begin
for Result := 0 to Length(Order) - 1 do
if (CaseSensitive and (CompareStr(Order[Result], S) = 0)) or
(not CaseSensitive and (CompareText(Order[Result], S) = 0)) then
Exit;
Result := Length(Order);
end;
function MyCompareStrings(List: TStringList; Index1, Index2: Integer): Integer;
begin
Result := GetStringOrder(List[Index1], List.CaseSensitive) -
GetStringOrder(List[Index2], List.CaseSensitive);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
List: TStringList;
begin
List := TStringList.Create;
try
List.CommaText := 'A,G,a,C,B,b,F,a,B,C,c,D,d,E,D,F,G,C,A,G,d,e,f,g';
List.CaseSensitive := True;
List.CustomSort(MyCompareStrings);
ListBox1.Items.Assign(List);
finally
List.Free;
end;
end;
Thak you!你給我光線,我需要! – Dirtycoder