![]() |
Re: Funktion optimieren
Hi alzaimar,
Deine Methode ist zwar sehr schnell, aber sie funktioniert (bei mir) nicht. :? Hab das "InitComparison" im Formcreate Ereignis eingefügt und die procedure ersetzt und es kommt immer als Result "False" raus. //Edit: Habs, du hattest ein "not" vor FraudChars vergessen. |
Re: Funktion optimieren
Moin moin,
die Zuweisung zu L kann doch weggelassen werden...
Delphi-Quellcode:
//..
if Length(s) <> 32 then begin Result := False; Exit; end; for i := 1 to 32 do //.. |
Re: Funktion optimieren
Hallo Dax,
dieser Ausdruck ist falsch. Die Bedingung zum Rausfliegen ist schon erfüllt wenn c ausserhalb '0' bis '9' liegt.
Delphi-Quellcode:
Grüsse
if (c <= '0' and c >= '9') or (c <= 'A' and C >= 'F') or (c <= 'a' and c >= 'f') then
Rainer |
Re: Funktion optimieren
Hi xtZ,
Hier nochmal eine Zusammenfassung (Fehler bereinigt, Optimierungen der Anderen eingebaut):
Delphi-Quellcode:
Var
FraudChars : Array [Char] Of Boolean; Procedure InitComparison; Var c : Char; Begin For c:=low(Char) To High (Char) Do FraudChars[c] := True; for c:='0' to '9' do FraudChars[c] := False; for c:='a' to 'f' do FraudChars[c] := False; for c:='A' to 'F' do FraudChars[c] := False; End; function TestFunc(const s: String): Boolean; Inline; var i : Integer; begin Result := True; if Length(s) <> 32 then Result := False else for i := 1 to 32 do If FraudChar [s[i]] Then Begin Result := False; Break; end; end; end; |
Re: Funktion optimieren
Hallo,
so verstehts auch jeder:
Delphi-Quellcode:
Grüsse
function TestFunc(const s: String): Boolean; Inline;
var i : Integer; begin Result := True; if Length(s) <> 32 then Result := False else for i := 1 to 32 do If FraudChar [s[i]] Then Begin Result := False; Break; end; end; Rainer |
Re: Funktion optimieren
Zitat:
Wobei man ja geteilter Meinung über die Formatierung sein kann, gelle? |
Re: Funktion optimieren
Richtig, alzimar. Das Einzige, was man vielleicht noch anders schreiben kann/möchte/sollte/haben/sein wäre diese Ecke:
Delphi-Quellcode:
Ich würde entweder die Anweisung hinten ans Then anhängen, oder das Then vor die Anweisung runterziehen, damit in 5 Jahren keiner auf die Idee kommt, da noch was hinzufrickeln.
if Length(s) <> 32 then
Result := False
Delphi-Quellcode:
@ws1976: nich böse sein, aber bei Deiner Schreibweise würde ich nie wissen, ob jetzt genügend ends da sind und wenn ja, ob sie an der richtigen Stelle sitzen.
if Length(s) <> 32 then Result := False
// oder if Length(s) <> 32 then Result := False |
Re: Funktion optimieren
Zitat:
Delphi-Quellcode:
if Length(s) <> 32 then
begin Result := False; end { if Length(s) } else begin for i := 1 to 32 do begin if FraudChar [s[i]] then Begin Result := False; Break; end; { if FraudChar } end; { for i } end; { else if Length(s) } |
Re: Funktion optimieren
Ein kleines Quentchen (JA, alte Rechtschreibung, das Wort hat wohl überhaupt nichts mit Quant zu tun :P) kann man wohl noch einsparen indem man sich die Zuweisung "Result:=True" am Anfang spart und nur ausführt wenn die Länge passt, da ansonsten eh gleich wieder Result:=False gesetzt wird. Also ab damit in den Else-Zweig :)
|
Re: Funktion optimieren
Hallo,
wenn wir schon dabei sind, Zuweisungen zu vermeiden, dann gleich richtig:
Delphi-Quellcode:
Wobei es hier ja um Geschwindigkeit geht, und die Zuweisung von Result das eax-Register blockiert. Deshalb sollte Result eigentlich nur am Ende der Funktion gesetzt werden. Das darf aber jemand anderes machen...
function TestFunc(const s: String): Boolean; Inline;
var i: Integer; begin Result := False; if Length(s) = 32 then begin for i := 1 to 32 do if FraudChar [s[i]] then Exit; Result := True; end; end; Gruß xaromz |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:50 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-2025 by Thomas Breitkreuz