2 Stimmen

Wie sortiere ich eine Liste nach der ersten Zahl?

Ich habe eine riesige Liste von Benutzern und jeder Benutzer hat seine ID, aber es id Zahlen sind durcheinander, so dass, wenn jemand kann mir zeigen, wie kann ich sortieren Benutzer nach Zahlen, jeder Wert hat diese Form

1:Stackoverflow
or
145000:Google 

Wenn ich das manuell mache, werde ich wohl den Verstand verlieren, da es mehr als 700000 Datensätze gibt. .... Danke für Ihre Zeit und Hilfe.

10voto

David Heffernan Punkte 585606

Extrahieren Sie die Zahl wie folgt:

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;

Sobald Sie die ID als Ganzzahl extrahieren können, können Sie eine Vergleichsfunktion schreiben. Zum Beispiel so:

function CompareIDs(List: TStringList; Index1, Index2: Integer): Integer;
begin
  Result := CompareValue(
    ID(List[Index1]), 
    ID(List[Index2])
  );
end;

CompareValue ist eine RTL-Funktion, die je nach den relativen Werten der beiden Operanden -1, 0 oder 1 zurückgibt.

Geben Sie diese Bausteine in TStringList.CustomSort und Ihre Arbeit ist getan.

MyStringList.CustomSort(CompareIDs);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X