Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi TStringlist Duplikate verhindern (https://www.delphipraxis.net/136303-tstringlist-duplikate-verhindern.html)

youuu 27. Jun 2009 21:21


TStringlist Duplikate verhindern
 
Hi,

Ich möchte alle Duplikate aus einer Stringlist löschen, habe etwas von DupIgnor gelesen aber irgendwie versteh ich das noch nicht, kann mir jemand das mal erklären?

Anmerkung: Duplicates wirkt sich nur aus, wenn das Array sortiert ist.

Nur Sortiert möchte ich es nicht wirklich haben, da die Einträge an ihrer Position schon richtig stehen und dadurch durch einander gewirbelt werden ;/

fnhofm 27. Jun 2009 21:26

Re: TStringlist Duplikate verhindern
 
Hi,

du kannst mit der Eigenschaft Duplicates in einer sortierten (Eigenschaft Sorted auf True) StringList bestimmen wie Duplikate behandelt werden sollen.
Du kannst sie akzepieren (dupAccept), einen Fehler veruhrsachen (dupError) oder sie Ignorieren (dupIgnore).

Hoffe das hilft weiter.

Gruß


Flo

[Edit]
Lese grade das Du die Liste unsortiert willst.

Dann hilft Dir dass ja nicht. Ich denke dann musst Du das selber beim einfügen prüfen.

Das könntest Du mit IndexOf() machen, wenn -1 zurückgegeben wird ist der String noch nicht in der Liste.
[/Edit]

youuu 27. Jun 2009 21:51

Re: TStringlist Duplikate verhindern
 
danke IndexOf() hat geklappt ;)

quendolineDD 28. Jun 2009 00:35

Re: TStringlist Duplikate verhindern
 
Oder du hast eine Kopie deiner Liste, welche Sortiert ist und überprüfst, ob das EInfügen eines Eintrages funktioniert.
Denk aber die IndexOf-Variante wird performanter sein. Hab das aber nicht getestet.

stahli 27. Dez 2009 11:26

Re: TStringlist Duplikate verhindern
 
nachträgliches Löschen mache ich so:

Delphi-Quellcode:
    for I := 0 to SL.Count - 2 do
    begin
      for J := SL.Count - 1 downto I + 1 do
      begin
        if SL[J] = SL[I] then
          SL.Delete(J);
      end;
    end;
Stahli


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:27 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz