AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein String in TStringList finden verschnellern?
Thema durchsuchen
Ansicht
Themen-Optionen

String in TStringList finden verschnellern?

Ein Thema von a.def · begonnen am 7. Jan 2017 · letzter Beitrag vom 10. Jan 2017
Antwort Antwort
Seite 4 von 7   « Erste     234 56     Letzte »    
a.def
(Gast)

n/a Beiträge
 
#31

AW: String in TStringList finden verschnellern?

  Alt 8. Jan 2017, 19:33
Das gibt einem zu denken. Danke für die ausführliche Erklärung!

Eine Frage habe ich noch. Wenn man sorted auf True setzt, ist das hinzufügen zur Liste deutlich langsamer und Einträge die schon vorhanden sind werden ignoriert.
Spielt es eine Rolle, ob ich Sorted vor oder nach dem Hinzufügen all meiner Einträge auf True setze?
  Mit Zitat antworten Zitat
Fritzew

Registriert seit: 18. Nov 2015
Ort: Kehl
678 Beiträge
 
Delphi 11 Alexandria
 
#32

AW: String in TStringList finden verschnellern?

  Alt 8. Jan 2017, 19:43
Also:


Delphi-Quellcode:
sl := Tstringlist.create;
sl.Duplicates = dupAccept; // Damit Duplicate erlaubt sind
// Alles einfügen

// dann
sl.sorted := true; // Sortiert die Liste
so sollte es gehen
Fritz Westermann
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#33

AW: String in TStringList finden verschnellern?

  Alt 8. Jan 2017, 19:47
Wenn Sorted = true muss beim Einfügen geschaut werden, wo der neue Eintrag hin muss, damit er dort eingefügt werden kann.

Statt Sorted = true könntest Du mal probieren, ob der Aufruf von Sort vor der Stelle, ab der Du suchen willst, etwas bringt. Du muss dann aber an der Stelle mit etwas Wartezeit rechnen.

Man kann für den Fall dann auch eine eigene Sortierroutine zuweisen, die eventuell auch das Laufzeitverhalten ändern könnte.
  Mit Zitat antworten Zitat
a.def
(Gast)

n/a Beiträge
 
#34

AW: String in TStringList finden verschnellern?

  Alt 8. Jan 2017, 20:34
Habe es nun testen können. Funktioniert einwandfrei, Sort; erst später aufzurufen und Sorted zu setzen (habe einfach beides gemacht).
Die Wartezeit für das "manuelle Sortieren" der Liste im Nachhinein mit dem Aufruf durch Sort; oder dem Setzen von Sorted := True ist sehr viel kürzer als die die entsteht, wenn man es bereits vorher so einstellt.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#35

AW: String in TStringList finden verschnellern?

  Alt 8. Jan 2017, 22:41
Habe es nun testen können. Funktioniert einwandfrei, Sort; erst später aufzurufen und Sorted zu setzen (habe einfach beides gemacht).
Die Wartezeit für das "manuelle Sortieren" der Liste im Nachhinein mit dem Aufruf durch Sort; oder dem Setzen von Sorted := True ist sehr viel kürzer als die die entsteht, wenn man es bereits vorher so einstellt.
Sorted := true ruft intern sowieso ein Sort auf, das nun aber nichts mehr verändert. Probier mal, ob es noch etwas schneller ist, wenn du den expliziten Sort -Aufruf weglässt.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
a.def
(Gast)

n/a Beiträge
 
#36

AW: String in TStringList finden verschnellern?

  Alt 8. Jan 2017, 22:51
Habe es nun testen können. Funktioniert einwandfrei, Sort; erst später aufzurufen und Sorted zu setzen (habe einfach beides gemacht).
Die Wartezeit für das "manuelle Sortieren" der Liste im Nachhinein mit dem Aufruf durch Sort; oder dem Setzen von Sorted := True ist sehr viel kürzer als die die entsteht, wenn man es bereits vorher so einstellt.
Sorted := true ruft intern sowieso ein Sort auf, das nun aber nichts mehr verändert. Probier mal, ob es noch etwas schneller ist, wenn du den expliziten Sort -Aufruf weglässt.
Gute Information.
Ich hatte extra noch den STRG+Linksklick auf .Sorted gemacht um danach zu suchen. Bin aber erst daran gescheitert es zu finden.
Bis procedure TStringList.SetSorted(Value: Boolean); bin ich gekommen und habe dort dann diese wunderschöne Zeile if Value then Sort; übersehen.

Ich werde das später mal mit der TStopWatch prüfen.
  Mit Zitat antworten Zitat
EmWieMichael

Registriert seit: 28. Mär 2012
103 Beiträge
 
#37

AW: String in TStringList finden verschnellern?

  Alt 9. Jan 2017, 08:40
Rein "logisch" nur eine mathematische Rechnung.
V = A - B (gleich 0, kleiner 0, größer 0)
Delphi-Referenz durchsuchenCompareValue
Dann weiß man sofort ob größer, kleiner oder gleich.
...
Wahrscheinlich steh´ ich wirklich auf´m Schlauch : Ich habe jetzt eine Rechnung aufgestellt und das Ergebnis steht in 'V'; ich weiß, dass 'V' kleiner 0, größer 0 oder gleich 0 ist. Um auf dieses Ergebnis zu reagieren, benötige ich doch immer noch zwei Vergleiche:
Code:
...
if (V = 0) then
 begin
   Gefunden;
   Break;
 end;
if (V < 0) then
 SuchindexNachUnten;
else
 SuchindexNachOben;
...
  Mit Zitat antworten Zitat
Klaus01

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

AW: String in TStringList finden verschnellern?

  Alt 9. Jan 2017, 10:08
oder so:

Delphi-Quellcode:
case v of
  low(Integer) .. -1: SuchIndexNachUnten;
  0: Gefunden;
  1 .. high(Integer): SuchIndexNachOben;
end;
Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
EmWieMichael

Registriert seit: 28. Mär 2012
103 Beiträge
 
#39

AW: String in TStringList finden verschnellern?

  Alt 9. Jan 2017, 10:14
oder so:
Delphi-Quellcode:
case v of
  low(Integer) .. -1: SuchIndexNachUnten;
  0: Gefunden;
  1 .. high(Integer): SuchIndexNachOben;
end;
Richtig, geht auch; allerdings dürfte diese Variante (wenigstens theoretisch) langsamer sein.
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#40

AW: String in TStringList finden verschnellern?

  Alt 9. Jan 2017, 12:17
@a.def
wenn du mit .sorted:=True; arbeitest, dann mußt Du noch eine Behandlung von doppelten Datensätzen mit einbauen z.B. .Duplicates:=dupIgnore; Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 7   « Erste     234 56     Letzte »    


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 10:30 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