我正在尝试以特定顺序对TStringList进行排序.
而不是A,B,C ..我试图在B,C,A中订购它.
我已经用我需要的顺序声明了一个const数组.
我尝试过CustomSorte,但我无法理解如何编写该函数.
我现在正在尝试for循环,但它真的很难和令人困惑!
我不是德尔福专家......
提前谢谢你们!
NGL*_*GLN 11
从有关TStringListSortCompare
函数类型的帮助:
Index1和Index2是要比较的List中的项的索引.回调返回:
- 如果由Index1标识的字符串位于由Index2标识的字符串之前,则值小于0
- 如果两个字符串相同,则为0
- 如果具有Index1的字符串位于由Index2标识的字符串之后,则值大于0.
因此,如果您从第一个项目的自定义顺序中减去第二个项目的自定义顺序,那么这些项目将按您的需要进行排序.
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;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
472 次 |
最近记录: |