AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Duplikate in Stringlist

Ein Thema von youuu · begonnen am 20. Jul 2010 · letzter Beitrag vom 14. Jun 2015
Antwort Antwort
Seite 1 von 3  1 23      
youuu

Registriert seit: 2. Sep 2008
Ort: Kleve
822 Beiträge
 
Delphi 2010 Professional
 
#1

Duplikate in Stringlist

  Alt 20. Jul 2010, 21:36
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;
Steven

Geändert von mkinzler (20. Jul 2010 um 21:40 Uhr) Grund: Code-Tag durch Delphi-Tag ersetzt
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.768 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Duplikate in Stringlist

  Alt 20. Jul 2010, 21:40
Guten Abend,

darst Du die Liste sortieren, oder sollen
alle Einträge in der Reihenfolge beibehalten werden?

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Duplikate in Stringlist

  Alt 20. Jul 2010, 21:42
Besser wäre es das Einfügen von doppelten Einträgen zu verhindern.
Markus Kinzler
  Mit Zitat antworten Zitat
youuu

Registriert seit: 2. Sep 2008
Ort: Kleve
822 Beiträge
 
Delphi 2010 Professional
 
#4

AW: Duplikate in Stringlist

  Alt 20. Jul 2010, 21:42
Darfst Sortiert werden
Steven
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.768 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Duplikate in Stringlist

  Alt 20. Jul 2010, 21:43
Besser wäre es das Einfügen von doppelten Einträgen zu verhindern.
.. darauf wollte ich hinaus.

Zitat:
Class
TStringList

Syntax


 property Duplicates: TDuplicates read FDuplicates write FDuplicates;
Description
Set Duplicates to specify what should happen when an attempt is made to add a duplicate string to a sorted list. The CaseSensitive property controls whether two strings are considered duplicates if they are identical except for differences in case.

The value of Duplicates should be one of the following.
Value Meaning
dupIgnore
Ignore attempts to add duplicate strings to the list.

dupError
raise an EStringListError exception when an attempt is made to add duplicate strings to the sorted list.

dupAccept
Permit duplicate strings in the sorted list.


Set Duplicates before adding any strings to the list. Setting Duplicates to dupIgnore or dupError does nothing about duplicate strings that are already in the list.
Note:
Duplicates does nothing if the list is not sorted.
Grüße
Klaus
Klaus

Geändert von Klaus01 (20. Jul 2010 um 21:50 Uhr)
  Mit Zitat antworten Zitat
youuu

Registriert seit: 2. Sep 2008
Ort: Kleve
822 Beiträge
 
Delphi 2010 Professional
 
#6

AW: Duplikate in Stringlist

  Alt 20. Jul 2010, 21:44
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?
Steven
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Duplikate in Stringlist

  Alt 20. Jul 2010, 21:45
Ja, den eine Tlist hat diese Funktionalität schon (siehe Beitrag von Klaus)
Markus Kinzler
  Mit Zitat antworten Zitat
youuu

Registriert seit: 2. Sep 2008
Ort: Kleve
822 Beiträge
 
Delphi 2010 Professional
 
#8

AW: Duplikate in Stringlist

  Alt 20. Jul 2010, 21:47
Ah so?

StringList.Duplicates := dupError;
Und dann mit Except anfangen?
Steven
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Duplikate in Stringlist

  Alt 20. Jul 2010, 21:48
dupIgnore wäre besser
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#10

AW: Duplikate in Stringlist

  Alt 20. Jul 2010, 21:48
Ich glaube, das geht nur in Verbindung mit "Sorted" oder?

Das funktioniert:
Delphi-Quellcode:
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;
Ohne "Sorted := true;" geht es nicht.

Nachtrag: Ah, das steht in Klaus' Zitat am Ende, sehe ich gerade "Duplicates does nothing if the list is not sorted."
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:17 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