AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi TStrings-> PERFORMANT! prüfen ob String mehrfach enthalten?
Thema durchsuchen
Ansicht
Themen-Optionen

TStrings-> PERFORMANT! prüfen ob String mehrfach enthalten?

Ein Thema von richard_boderich · begonnen am 18. Sep 2008 · letzter Beitrag vom 18. Sep 2008
Antwort Antwort
Benutzerbild von richard_boderich
richard_boderich

Registriert seit: 21. Jun 2004
Ort: Berlin
1.067 Beiträge
 
Delphi 7 Architect
 
#1

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

  Alt 18. Sep 2008, 14:03
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?
mfG Richard

Cimmams schrieb "das einzige was an ArmA gut ist, ist die Grafik bis 100m und der Rest ist so unreal wie unsere Demokratie."
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.197 Beiträge
 
Delphi 10.4 Sydney
 
#2

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

  Alt 18. Sep 2008, 14:05
Wie wäre es mit Sortieren?

Ansonsten nimm einen BTree oder eine Hash-Table.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#3

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

  Alt 18. Sep 2008, 14:07
Hallo

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;
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von richard_boderich
richard_boderich

Registriert seit: 21. Jun 2004
Ort: Berlin
1.067 Beiträge
 
Delphi 7 Architect
 
#4

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

  Alt 18. Sep 2008, 14:09
@ 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.
mfG Richard

Cimmams schrieb "das einzige was an ArmA gut ist, ist die Grafik bis 100m und der Rest ist so unreal wie unsere Demokratie."
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#5

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

  Alt 18. Sep 2008, 14:12
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.
  Mit Zitat antworten Zitat
Benutzerbild von richard_boderich
richard_boderich

Registriert seit: 21. Jun 2004
Ort: Berlin
1.067 Beiträge
 
Delphi 7 Architect
 
#6

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

  Alt 18. Sep 2008, 14:12
@toms

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

Cimmams schrieb "das einzige was an ArmA gut ist, ist die Grafik bis 100m und der Rest ist so unreal wie unsere Demokratie."
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#7

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

  Alt 18. Sep 2008, 14:33
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.
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von richard_boderich
richard_boderich

Registriert seit: 21. Jun 2004
Ort: Berlin
1.067 Beiträge
 
Delphi 7 Architect
 
#8

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

  Alt 18. Sep 2008, 14:49
@toms

Stimmt, machmal sehe ich den Wald vor lauter Bäumen nicht.
mfG Richard

Cimmams schrieb "das einzige was an ArmA gut ist, ist die Grafik bis 100m und der Rest ist so unreal wie unsere Demokratie."
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.197 Beiträge
 
Delphi 10.4 Sydney
 
#9

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

  Alt 18. Sep 2008, 14:56
Zitat von richard_boderich:
Sortieren mit der Ermittlung von mehrfachvorkommen zu tun?
Wurde schon beantwortet.
Zitat von richard_boderich:
Btrees sagt mir jetzt nichts.
BTree
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Antwort Antwort


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 00:16 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