我对使用混合值排序TStringList有一点问题.它类似于:
7567533575 Joe
1543779744 Ann
9757462323 Jack
6999966578 Stef
我需要对此列表进行排序以查看:
1543779744 Ann
6999966578 Stef
7567533575 Joe
9757462323 Jack
我可以使用大约3x for循环,使用字符串修剪和一个数组来完成此操作.但这是非常蹩脚的解决方案...我想,有人有最好的代码.我不懂CustomSort ......呃.请帮我.
使用CustomSort()是正确的解决方案.只需传递一个解析和比较2个输入字符串的函数,返回:
如果第一个字符串应出现在第二个字符串之前,则为<0.
如果2个字符串"相等"并且任一字符串可以出现在另一个字符串之前,则为0.
如果第二个字符串应出现在第一个字符串之前,则> 0.
function MySortFunc(List: TStringList; Index1, Index2: Integer): Integer;
var
Value1, Value2: Int64;
S: string;
begin
S := List[Index1];
Value1 := StrToInt64(Copy(S, 1, Pos(' ', S)-1));
S := List[Index2];
Value2 := StrToInt64(Copy(S, 1, Pos(' ', S)-1));
if Value1 < Value2 then
Result := -1
else if Value2 < Value1 then
Result := 1
else
Result := 0;
end;
MyStringList.CustomSort(MySortFunc);
Run Code Online (Sandbox Code Playgroud)