![]() |
TstringList und TRegex.isMatch
Die Frage was ist smarter bei einer TsringList mit x tausend einträgen.
Ein Schleifendurchlauf mit for I = 0 to TstringList count -1 und Tregex.isMatch. oder TRegex.Ismatch(Tstringlist.text.....); Da auch mal bis zu 20k Einträge kommen können wüste ich das gerne. Gruß SM:-D |
AW: TstringList und TRegex.isMatch
Hallo,
eine Suche wird dann schneller wenn Du nicht mehr alle 20k Einträge durchsuchen musst. Mit TRegEx wird der Vergleich an sich ja komplexer - daher würde ich vermuten, dass das am Ende nicht schneller ist. Entweder du kannst über die THasedStringList was erreichen oder wenn Du die StringList sortieren kannst über binäre Suche die Anzahl der Vergleiche eingrenzen. |
AW: TstringList und TRegex.isMatch
Eine simple Zeitmessung für Variante A und B würde doch Erkenntnisse liefern ... so mache ich das immer
|
AW: TstringList und TRegex.isMatch
Zitat:
Aber einfach nur Sortieren oder gar eine Hashmap bringen hier gar nichts, denn es geht um pattern matching und nicht um einfachen Vergleich von Strings. |
AW: TstringList und TRegex.isMatch
Ein Aufruf von TStringList.Text iteriert doch über alle Elemente und setzt die mit Zeilenumbruch aneinander. Das RegEx muss auch den Text von vorne bis hinten durchgehen, dauert also vermutlich proportional zur Textlänge. Debuggen lässt es sich bestimmt leichter in der ersten Version.
|
AW: TstringList und TRegex.isMatch
Zitat:
|
AW: TstringList und TRegex.isMatch
Leider kann ich (vorab) nicht Testen, da ich die originalen Datensätze nicht habe.
Ich hatte auch auf eine eindeutigere Antwort gehofft. Was aber wiederum auch nicht unbedingt schlecht ist wenn es keine Eindeutige Antwort gibt, da dann keine 10 Sekunden unterschied zu erwarten sind ^^ |
AW: TstringList und TRegex.isMatch
Hallo,
mir ist bei der Fragestellung nicht ganz klar, was Du als Ergebnis erwartest? Kommt eine Zeichenfolge... irgendwo in der Stringliste vor oder In welcher Zeile der Stringliste kommt eine Zeichenfolge... vor? Vermutlich ersteres? Mein Erfahrung bei der Arbeit mit Stringlisten mit größerem Inhalt (mehrere MB Text in einer mehr oder weniger großen Anzahl von Zeilen): Das Ersetzen von Zeichenfolgen via AnsiReplaceText... ist bei einer zeilenweisen Verarbeitung deutlich schneller, als eine Ersetzung über "Stringliste.Text". Ob sich TRegex.isMatch ähnlich verhält, kann ich (mangels Erfahrung) nicht sagen. |
AW: TstringList und TRegex.isMatch
Es geht um eine Art Index der Inhalt eines Editfeldes wird mit dem Index abgeglichen. Wenn vorhanden verwerfe Inhalt des Tabsheets wenn nicht vorhanden füge es dem Index hinzu und arbeite dioutinen ab.
Ich mache momentan den Probelauf mit der Regex Variante schau mer mal. Grüße SM |
AW: TstringList und TRegex.isMatch
Hallo,
unter 'nem Index stelle ich mir sowas vor:
Code:
Ist Dein Index in der Art aufgebaut?
Aladin
Benjamin Carolin ... Yvonne Zacharias Wenn ja, dann versuche es doch mal mit
Delphi-Quellcode:
Die Stringliste muss dafür nicht sortiert sein.
if StringListe.IndexOf(Editfeld.Text) < 0 then begin
StringListe.Add(Editfeld.Text); end else begin VerwerfeInhaltDesTabsheets; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:49 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 by Thomas Breitkreuz