gpt4 book ai didi

delphi - 如何根据特定规则对TStringList进行排序?

转载 作者:行者123 更新时间:2023-12-03 19:08:01 25 4
gpt4 key购买 nike

我有一个TStringList,其中包含很多行字符串。

我现在要做的是根据某些值对TStringList进行排序,具体取决于它们位于TStringList中的哪一列。

例如。

adsfoiadjfoaidjfoaidfjo BABABA asdfsd 0101010
skfjlgjljkglsdkgjasaasd BABABA dafdff 0419299
asdaksdjakbkj3409560295 BABABA kjfhan 0923858
dsdddsdasdadasdasdasdgg BABABA dafdff 0419299
45645654654654654654666 BABABA dafdff 0489421
dsdddsdasdadasdasdasdgg CACACA dafdff 0419299


如您所见,第二行和第四行具有相同的BABABA值,并且在行尾也具有相同的数字,第五行具有相同的BABABA,但数字不同。第六行具有相同的编号,但不相同。

我想要对它们进行排序的正确方法是

adsfoiadjfoaidjfoaidfjo BABABA asdfsd 0101010
skfjlgjljkglsdkgjasaasd BABABA dafdff 0419299
dsdddsdasdadasdasdasdgg BABABA dafdff 0419299
45645654654654654654666 BABABA dafdff 0489421
asdaksdjakbkj3409560295 BABABA kjfhan 0923858
dsdddsdasdadasdasdasdgg CACACA dafdff 0419299


我要的是排在BABABA(第25-30列)之后的最重要内容,如果数字上有匹配项,那么数字也是如此。如果数字不匹配,则应在BABABA之后排序,如果不匹配,则可以任何方式对其进行排序。

最佳答案

因此,您首先要在第二列上排序,然后在第四列上排序。然后,您需要TStringList.CustomSort

从有关TStringListSortCompare函数类型的帮助中:


索引1和索引2是要比较的列表中项目的索引。
回调返回:


如果Index1标识的字符串位于Index2标识的字符串之前,则该值小于0
如果两个字符串相等,则为0
如果带有Index1的字符串位于由Index2标识的字符串之后,则该值大于0。



因此,如果您首先在第二列进行比较,并且在相等时,则在第四列进行比较。假设所有文本都大写,所有字符串的大小均相等,并且语法相同,那么这应该可以工作:

function CompareItems(List: TStringList; Index1, Index2: Integer): Integer;
begin
Result := CompareStr(Copy(List[Index1], 25, 6), Copy(List[Index2], 25, 6));
if Result = 0 then
Result := CompareStr(Copy(List[Index1], 39, 7), Copy(List[Index2], 39, 7));
end;


用法:

List.CustomSort(CompareItems);

关于delphi - 如何根据特定规则对TStringList进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21142081/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com