Forum: Object-Pascal / Delphi-Language
Delphi
by negaH,
28. Nov 2006
JumpTable)];
und ja ist sehr schnell da nur ein Lookup in einer festen Tabelle entsteht und dann ein call ausgeführt wird. Schneller als jede CASE OF Abfrage.
AnsiIndexText() kannte ich noch garnicht, in D5 gibts die noch nicht. Hast du mal in die Implementierung geschaut wie Borland die Suche implementiert hat ?
Jetzt müsste man noch eine Funktion schreiben die den CALL der durch den...
Forum: Object-Pascal / Delphi-Language
Delphi
by negaH,
28. Nov 2006
Hm naja, sind wir doch mal ehrlich. Dein Vorschlag sieht super sauber aus, ist somit enorm leicht verständlich, und wenn man die Arbeitsweise des Compilers kennt so weiß man auch das der erzeugte Laufzeitcode auch relativ effizient ist im Vergleich zu TStringList oder allen anderen dynamisch zu erzeugenden Listenobjekten. Klar, natürlich nur aus Sicht wie in diesem Beispiel, denn bei zb. 1024...
Forum: Object-Pascal / Delphi-Language
Delphi
by negaH,
28. Nov 2006
Je nach Datenmenge sind es gewaltige Unterschiede, vom schlechtesten zum besten sortiert
1.) TStringList
2.) IndexOf() ohne binärer Suche
3.) Pos()
4.) BoyerMoorePos()
5.) IndexOf() aber mit binärer Suche, statt wie oben einfach linear
6.) Trees wie mein DAWG
7.) Hash-Vergleich
Forum: Object-Pascal / Delphi-Language
Delphi
by negaH,
28. Nov 2006
@Mabuse:
// statt '#' kann natürlich auch alles andere genommen werden ;-)
if pos('#'+Bezeichnung+'#', '#rohr#schraube#schraubendreher#')>0 then ....
ja könnte man, zb.
Forum: Object-Pascal / Delphi-Language
Delphi
by negaH,
28. Nov 2006
also bevor du mit der langsammen TStringList arbeitest dann besser so:
if Pos('-' + Bezeichnung + '-', '-rohr-schraube-schraubendreher-') > 0 then
Ist auch nicht sonderlich effizient, da Pos() benutzt wird, drüfte aber schneller sein als eine Schleife, TStringList oä.
Falls Pos() intern nach dem Boyer-Moore Algo. arbeitet ist die Stringsuche sogar sehr effizient.
Die schnellste...