Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Optimierung: Vereinfachte IF/OR-Abfrage bei Integer (https://www.delphipraxis.net/90703-optimierung-vereinfachte-if-abfrage-bei-integer.html)

Rakshasa 22. Apr 2007 12:56


Optimierung: Vereinfachte IF/OR-Abfrage bei Integer
 
Hallo Leute,

vielleicht kann mir jemand sagen, wie ich am schönsten den Wert eines Integers überprüfen kann.
BIsher tue ich das so:

Code:
if (iTyp = 3) OR (iTyp = 5) OR (iTyp = 6) then begin

end;

Gibt es für diesen Fall eine schönere Methode, als ORs aneinanderzureihen?

3_of_8 22. Apr 2007 12:58

Re: Optimierung: Vereinfachte IF/OR-Abfrage bei Integer
 
Delphi-Quellcode:
if iTyp in [3, 5, 6] then

Apollonius 22. Apr 2007 12:58

Re: Optimierung: Vereinfachte IF/OR-Abfrage bei Integer
 
Delphi-Quellcode:
if ityp in [3,5,6] then
 ...

CCRDude 22. Apr 2007 13:01

Re: Optimierung: Vereinfachte IF/OR-Abfrage bei Integer
 
Delphi-Quellcode:
if iTyp in [3,5,6] then begin
end;

case iTyp of
   3,5,6: begin
   end;
end;
edit: etwas langsam... würd trotzdem case benutzen, scheint mir etwas optimaler als Zahlen erst in ein set zu verwandeln (das zudem auf byte-Größe beschränkt ist... da muss man aufpassen, wenn man ganze Bereiche definiert, etwa "in [1..1000]" ;) ).

3_of_8 22. Apr 2007 13:05

Re: Optimierung: Vereinfachte IF/OR-Abfrage bei Integer
 
Falsch. Sets sind auf 32 Bit beschränkt, also maximal 32 Elemente. Und da beschwert sich dann eh der Compiler. Außerdem kann ich mir kaum vorstellen, dass der Compiler so dumm ist und ein Set weniger gut optimiert als ein case.

Rakshasa 22. Apr 2007 13:07

Re: Optimierung: Vereinfachte IF/OR-Abfrage bei Integer
 
Wow ... das ging ja schnell! :)

das mit

Code:
if ityp in [3,5,6] then
ist genau das, was ich gesucht hatte! Dachte bisher, das ginge so nur bei Sets... Vielen Dank!
Eine Case-Abfrage kommt bei mir leider nicht in Frage, da die Abfrage in mehreren If...then...else Konstrukturen vorkommt und daher möglichst in einer Zeile erfolgen muss.

Hawkeye219 22. Apr 2007 13:15

Re: Optimierung: Vereinfachte IF/OR-Abfrage bei Integer
 
Zitat:

Zitat von 3_of_8
Sets sind auf 32 Bit beschränkt, also maximal 32 Elemente.

32 Byte, also 256 Elemente.

Gruß Hawkeye

CCRDude 22. Apr 2007 13:17

Re: Optimierung: Vereinfachte IF/OR-Abfrage bei Integer
 
Zitat:

Zitat von 3_of_8
Falsch. Sets sind auf 32 Bit beschränkt, also maximal 32 Elemente. Und da beschwert sich dann eh der Compiler. Außerdem kann ich mir kaum vorstellen, dass der Compiler so dumm ist und ein Set weniger gut optimiert als ein case.

Hatte gerade hier nachgeschlagen, dort steht etwas von 256 Werten.

Und glaub mir, der Compiler beschwert sich leider nicht - abgesehen von dem, was auf DelphiBasics steht, hatte ich auch schon diverse Probleme mit in, die ziemlich genau so waren, wie auf DelphiBasics auch beschrieben (lowest byte).

Gabs auch im Borland QC schon einiges zu - zum einen, daß 256 Einträge möglich sind, zum anderen daß "in [0..n]" "very bad practice" ist (und das sage ich aus eigener Erfahrung, musste da schon selber früh lernen, daß der Compiler eben doch nicht besonders optimiert oder erkennt :D ).

3_of_8 22. Apr 2007 13:49

Re: Optimierung: Vereinfachte IF/OR-Abfrage bei Integer
 
Zitat:

Zitat von Rakshasa
ist genau das, was ich gesucht hatte! Dachte bisher, das ginge so nur bei Sets

[3, 5, 6] IST ein Set.

@Hawkeye? 32 Byte? :shock: Hätt ich kaum gedacht, ich dachte das beschränkt sich auf Cardinals...


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:47 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