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 2  1 2      
youuu

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

AW: Duplikate in Stringlist

  Alt 20. Jul 2010, 20: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.877 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Duplikate in Stringlist

  Alt 20. Jul 2010, 20: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
 
#3

AW: Duplikate in Stringlist

  Alt 20. Jul 2010, 20: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.877 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Duplikate in Stringlist

  Alt 20. Jul 2010, 20: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
 
#5

AW: Duplikate in Stringlist

  Alt 20. Jul 2010, 20: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
youuu

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

AW: Duplikate in Stringlist

  Alt 20. Jul 2010, 20:50
Super danke
Steven
  Mit Zitat antworten Zitat
fatalerror
(Gast)

n/a Beiträge
 
#7

AW: Duplikate in Stringlist

  Alt 20. Jul 2010, 21:16
Wenn in einer Liste aber bereits vorhandene Duplikate stehen (so wie im ursprünglichen Posting angegeben) würde ich die Liste kopieren, dies sollte bedeutend schneller gehen als das Prüfen mit deiner Routine:

Nur so hingetippt ohne zu überprüfen obs auch funktioniert

Delphi-Quellcode:
var
sl1, sl2:TSTringlist;
i:Integer;
t_start, t_stop:integer;

iLow, iHigh: integer;

begin
sl1:= Tstringlist.Create;
sl2:=TStringlist.Create;

try
  sl1.loadfromFile('c:\temp\testfîle.lst'); //laden einer Stringliste

  //Variante mit neuer Stringliste
  sl2.Duplicates:= dupignore;
  sl2.Sorted:=true;

  t_start := gettickcount;
  sl2.Assign(Sl1); //Einträge der zweiten Stringliste zuordnen
  t_stop := gettickcount;
  showmessage('Variante1; ' +inttostr(t_stop - t_start)+ ' ms');

  //Variante2 kopiert aus dem Originalposting

  t_start := gettickcount;
  for iLow := 0 to sl1.Count - 2 do
    for iHigh := Pred(sl1.Count) downto Succ(iLow) do
      if sl1[iLow] = sl1[iHigh] then
        sl1.Delete(iHigh);

  t_stop := gettickcount;
  showmessage('Variante2: ' +inttostr(t_stop - t_start)+ ' ms');

finally
 sl1.Free;
 sl2.Free;

end;
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#8

AW: Duplikate in Stringlist

  Alt 20. Jul 2010, 21:36
Eine Hashmap prüft das Vorhandensein eines Strings wesentlich effektiver, als das in der TStringList eingebaute 'Duplicates'. Beim Einfügen dürfte das die bei weitem schnellste Möglichkeit sein.

Du kannst Dir auch die THashedStringList aus der Unit 'IniFiles' nehmen, die hier vielleicht auch schnell genug sein könnte.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#9

AW: Duplikate in Stringlist

  Alt 14. Jun 2015, 16:43
Eine Hashmap prüft das Vorhandensein eines Strings wesentlich effektiver, als das in der TStringList eingebaute 'Duplicates'. Beim Einfügen dürfte das die bei weitem schnellste Möglichkeit sein.

Du kannst Dir auch die THashedStringList aus der Unit 'IniFiles' nehmen, die hier vielleicht auch schnell genug sein könnte.
Lustig. Auch 5 Jahre alte Tipps sind immer noch gültig.

EDIT: Unnötige Bemerkung entfernt.

Geändert von Dejan Vu (15. Jun 2015 um 06:54 Uhr)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

AW: Duplikate in Stringlist

  Alt 20. Jul 2010, 20:51
Ja, das steht aber auch schon in Klaus' Beitrag
Alternativ könnte man mit .IndexOf() auf Vorhandensein prüfen; ist aber langsamer funktioniert aber auch unsortiert
Markus Kinzler
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 05:55 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