Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TStrings-> PERFORMANT! prüfen ob String mehrfach enthalten? (https://www.delphipraxis.net/120892-tstrings-performant-pruefen-ob-string-mehrfach-enthalten.html)

richard_boderich 18. Sep 2008 13:03


TStrings-> PERFORMANT! prüfen ob String mehrfach enthalte
 
Hallo zusammen!

Mittels Indexof() kann ich ja bei TStrings prüfen ob ein bestimmter String vorhanden ist und unter welchem Index er gespeichert ist.
In der Delphihilfe steht jedoch, das bei mehrmaligem vorkommen nur das erste vorkommen zuruckgegeben wird. Nun könnte man ja anfanngen eine
Schleife zu basteln und das ganze mit Hilfsvariablen lösen. Ich brauche es aber so performant wie irgend möglich!

Ich muss auch nur wissen ob der String mehrmals vorkommt, Index usw. brauch ich nicht. Gibt es da eine Möglichkeit?

Bernhard Geyer 18. Sep 2008 13:05

Re: TStrings-> PERFORMANT! prüfen ob String mehrfach enth
 
Wie wäre es mit Sortieren?

Ansonsten nimm einen BTree oder eine Hash-Table.

toms 18. Sep 2008 13:07

Re: TStrings-> PERFORMANT! prüfen ob String mehrfach enth
 
Hallo

Delphi-Quellcode:
eine Schleife zu basteln und das ganze mit Hilfsvariablen lösen.
IndexOf macht genau das und bricht ab, wenn der String gefunden wurde.

Falls die Daten sortiert sind, könnte man eine binäre Suche machen.

Delphi-Quellcode:
function TStrings.IndexOf(const S: string): Integer;
begin
  for Result := 0 to GetCount - 1 do
    if CompareStrings(Get(Result), S) = 0 then Exit;
  Result := -1;
end;

richard_boderich 18. Sep 2008 13:09

Re: TStrings-> PERFORMANT! prüfen ob String mehrfach enth
 
@ Bernhard

Was hat denn Sortieren mit der Ermittlung von mehrfachvorkommen zu tun? Hashtabels will ich nicht verwenden, da dort die eindeutigkeit nicht gegeben ist.
Btrees sagt mir jetzt nichts.

Namenloser 18. Sep 2008 13:12

Re: TStrings-> PERFORMANT! prüfen ob String mehrfach enth
 
Zitat:

Zitat von richard_boderich
Was hat denn Sortieren mit der Ermittlung von mehrfachvorkommen zu tun?

Wenn die Liste sortiert ist stehen gleiche Einträge direkt untereinander.

richard_boderich 18. Sep 2008 13:12

Re: TStrings-> PERFORMANT! prüfen ob String mehrfach enth
 
@toms

Du meinst statt des Exit ein Stringlist.delete(index) und dann erneut aufrufen, bis das Ergebnis -1 ist? Richtig?

toms 18. Sep 2008 13:33

Re: TStrings-> PERFORMANT! prüfen ob String mehrfach enth
 
Zitat:

Zitat von richard_boderich
@toms

Du meinst statt des Exit ein Stringlist.delete(index) und dann erneut aufrufen, bis das Ergebnis -1 ist? Richtig?

Warum löschen? Einfach einen Zähler hochzählen wenn der String gefunden wurde und in der Schleife weiterfahren.

richard_boderich 18. Sep 2008 13:49

Re: TStrings-> PERFORMANT! prüfen ob String mehrfach enth
 
@toms

Stimmt, machmal sehe ich den Wald vor lauter Bäumen nicht. ;)

Bernhard Geyer 18. Sep 2008 13:56

Re: TStrings-> PERFORMANT! prüfen ob String mehrfach enth
 
Zitat:

Zitat von richard_boderich
Sortieren mit der Ermittlung von mehrfachvorkommen zu tun?

Wurde schon beantwortet.
Zitat:

Zitat von richard_boderich
Btrees sagt mir jetzt nichts.

BTree


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:58 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