Einzelnen Beitrag anzeigen

xineohp

Registriert seit: 29. Jan 2004
Ort: Heusenstamm
420 Beiträge
 
Delphi 2005 Professional
 
#6

Re: doppelte elemente löschen

  Alt 12. Nov 2004, 23:51
moin,

ich an deiner Stelle würde es so machen wie von mir weiter oben beschrieben, und zwar weil, es die Methode mit dem gringsten Aufwand ist Und außerdem macht die Stringlist eh nichts anderes als das, was in dem von dir genannten Thread beschrieben ist:

.AddStrings(Strings: TStings) besteht lediglich aus einer Schleife, die für jedes Element aus Strings die Funktion AddObject(const S: string; AObject: TObject) aufruft. (AddObject ist im Prinzip gleichbedeutend mit der Funktion Add(const S: string). Add(const S: string) ruft nämlich lediglich AddObject mit S und nil auf.)
Diese wiederum überprüft, sofern Sorted=true, mittels der Funktion Find(const S: string; var Index: Integer) ob der String bereits vorhanden ist. Duplicates legt hierbei fest ob, falls dem so ist, ein Fehler aufgerufen wird oder nicht.
Find ist wie folgt implementiert:
Delphi-Quellcode:
function TStringList.Find(const S: string; var Index: Integer): Boolean;
var
  L, H, I, C: Integer;
begin
  Result := False;
  L := 0;
  H := FCount - 1;
  while L <= H do
  begin
    I := (L + H) shr 1;
    C := CompareStrings(FList^[I].FString, S);
    if C < 0 then L := I + 1 else
    begin
      H := I - 1;
      if C = 0 then
      begin
        Result := True;
        if Duplicates <> dupAccept then L := I;
      end;
    end;
  end;
  Index := L;
end;
Wenn du also das ganze schneller machen willst, musst du überprüfen, ob es günstiger ist eine n Elementige Liste zu sortiern und anschließend aufeinanderfolgende Elemente auf Gleichheit zu prüfen oder die Funktion Find n mal auf eine Liste anzuwenden deren Elemente von 0 bis maximal n ansteigen.
Peter Enenkel
blubb
  Mit Zitat antworten Zitat