Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#6

Re: schnellere Alternative zu StringListe.IndexOf() gesucht

  Alt 25. Mai 2010, 21:21
Find funktioniert nur mit einer sortierten Liste, leider gibt es keine Prüfung, ob es sortiert ist und somit liefert Find falsche Werte.
Und Dupplicates funktioniert auch nur mit einer sortierten Liste und ebenfalls kein Prüfung.
Delphi-Quellcode:
function TStringList.Add(const S: string): Integer;
begin
  Result := AddObject(S, nil);
end;

function TStringList.AddObject(const S: string; AObject: TObject): Integer;
begin
  if not Sorted then
    Result := FCount
  else
    if Find(S, Result) then
      case Duplicates of
        dupIgnore: Exit;
        dupError: Error(@SDuplicateString, 0);
      end;
  InsertItem(Result, S, AObject);
end;



Wenn du dennoch die Liste (Un)Sortierung behalten willst, dann führe einen Index mit und Zersortiere es danach wieder.
z.B. irgendwie so
Delphi-Quellcode:
StringList_MN.Sorted := True;
StringList_MN.Duplicates := dupIgnore;

// alles hinzufügen
StringList_MN.AddObject(S, TObject(StringList_MN.Count));
...

// und zum Schluß nach Index wieder zurücksortieren
StringList_MN.CustomSort(
  function(List: TStringList; Index1, Index2: Integer): Integer
  begin
    Result := Integer(List.Objects[Index1]) - Integer(List.Objects[Index2]);
  end);
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat