![]() |
Duplikate in Stringlist
Hi, ich benutze diesen Algorithmus um Duplikate in einer Stringlist zu löschen, allerdings braucht dieser extrem lange bei 100.000 Einträgen und mehr.
Kennt jemand einen schnelleren?
Delphi-Quellcode:
procedure KillDuplicates(s: TStrings);
var iLow, iHigh: integer; begin for iLow := 0 to s.Count - 1 do for iHigh := Pred(s.Count) downto Succ(iLow) do if s[iLow] = s[iHigh] then s.Delete(iHigh); end; |
AW: Duplikate in Stringlist
Guten Abend,
darst Du die Liste sortieren, oder sollen alle Einträge in der Reihenfolge beibehalten werden? Grüße Klaus |
AW: Duplikate in Stringlist
Besser wäre es das Einfügen von doppelten Einträgen zu verhindern.
|
AW: Duplikate in Stringlist
Darfst Sortiert werden
|
AW: Duplikate in Stringlist
Zitat:
Zitat:
Klaus |
AW: Duplikate in Stringlist
Wenn ich das mache Mkinzler, dann muss ich doch bei jeden Eintrag neu abfragen, ob dieser in der Liste existiert oder nicht, dann geht die Bearbeitungszeit ebenfalls nach oben, bei 100.000 und mehr Einträgen.
Oder versteh ich das falsch? |
AW: Duplikate in Stringlist
Ja, den eine Tlist hat diese Funktionalität schon (siehe Beitrag von Klaus)
|
AW: Duplikate in Stringlist
Ah so?
StringList.Duplicates := dupError; Und dann mit Except anfangen? |
AW: Duplikate in Stringlist
dupIgnore wäre besser
|
AW: Duplikate in Stringlist
Ich glaube, das geht nur in Verbindung mit "Sorted" oder?
Das funktioniert:
Delphi-Quellcode:
Ohne "Sorted := true;" geht es nicht.
var
sl: TStringList; begin sl := TStringList.Create; try sl.Duplicates := dupIgnore; sl.Sorted := true; sl.Add('a'); sl.Add('b'); sl.Add('a'); ShowMessage(sl.Text); finally FreeAndNil(sl); end; end; Nachtrag: Ah, das steht in Klaus' Zitat am Ende, sehe ich gerade "Duplicates does nothing if the list is not sorted." :wall: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:21 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz