Forum: Programmieren allgemein
Delphi
by himitsu,
14. Jun 2022
Zum Glück setzt dieses TDictionary<K,V> das Value auch dann, wenn nichts gefunden wurde, sonst wäre das Result von FindField nicht initialisiert, weil niemand das Result vom TryGetValue auswertet. :stupid:
Forum: Programmieren allgemein
Delphi
by himitsu,
13. Jun 2022
Wie schon gesagt wurde, scheint das Dictionary ja bereits ausreichend optimal zu sein.
Hier lässt sich nur durch die Wahl der "passenden" Standardkomponente, in vielen Fällen, bereits ein halbwegs optimales Ergebnis erreichen.
Eben Dictionary (oder THashedStringList, gegenüber einer TStringList, ohne dass man Mehraufwand hat.
Forum: Programmieren allgemein
Delphi
by himitsu,
13. Jun 2022
Bei 100 Einträgen, braucht eine binäre Suche maximal 7 Vergleiche,
während eine sequentielle Suche durchschnittlich 50, aber bis zu 100 Vergleiche benötigt.
Das wäre somit locker 90% schneller.
Bei 1000 Einträgen sind es bereits maximal 10 zu bis zu 1000 Vergleiche. (99%)
Als HashList sind Integer-Vergleiche (ein CPU-Register) gegen String-Vergleiche. (optimiert/sortiert oder als...
Forum: Programmieren allgemein
Delphi
by himitsu,
13. Jun 2022
Es kommt darauf an, wie oft es gemacht wird.
Auch "nur" 20 Millisekunden mehr können schlimm werden, wenn man es eine Million Mal macht.
Forum: Programmieren allgemein
Delphi
by himitsu,
13. Jun 2022
Bei TStringList und Array aka TArray<T> ist es das Selbe:
Wenn sie sortiert sind, dann geht die Suche schneller (je größer die Liste ist, um so schneller)
TArray.BinarySearch<T>(...) und vorher TArray.Sort<T>(...),
bzw. direkt beim Befüllen der Liste via TArray.BinarySearch und Insert die Einträge an der "richtigen" Stelle einfügen.
Das geht aber nur, wenn man nach "ganzen"...