ユーザーの膨大なリストがあり、すべてのユーザーには id がありますが、ID番号がめちゃくちゃになっているため、ユーザーを番号でソートする方法を誰かが教えてくれれば、すべての値はこの形式になります
1:Stackoverflow
or
145000:Google
700000 件以上のレコードがあるので、手動で行うと気が狂ってしまうと思います。お時間とご協力をありがとうございます....
次のように番号を抽出します。
function ID(const str: string): Integer;
var
p: Integer;
begin
p := Pos(':', str);
if p=0 then
raise Exception.CreateFmt('Invalid string format: %s', [str]);
Result := StrToInt(Copy(str, 1, p-1));
end;
ID を整数として抽出できたら、比較関数を記述できます。このような:
function CompareIDs(List: TStringList; Index1, Index2: Integer): Integer;
begin
Result := CompareValue(
ID(List[Index1]),
ID(List[Index2])
);
end;
CompareValue
2 つのオペランドの相対値に応じて -1、0、または 1 を返す RTL 関数です。
これらの構成要素を投入すれTStringList.CustomSort
ば、あなたの仕事は完了です。
MyStringList.CustomSort(CompareIDs);