2

ユーザーの膨大なリストがあり、すべてのユーザーには id がありますが、ID番号がめちゃくちゃになっているため、ユーザーを番号でソートする方法を誰かが教えてくれれば、すべての値はこの形式になります

1:Stackoverflow
or
145000:Google 

700000 件以上のレコードがあるので、手動で行うと気が狂ってしまうと思います。お時間とご協力をありがとうございます....

4

1 に答える 1

10

次のように番号を抽出します。

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;

CompareValue2 つのオペランドの相対値に応じて -1、0、または 1 を返す RTL 関数です。

これらの構成要素を投入すれTStringList.CustomSortば、あなたの仕事は完了です。

MyStringList.CustomSort(CompareIDs);
于 2012-06-30T16:39:03.843 に答える