Hauptseite >Tips zu VB5/6 > Wert in einem unsortierten Array suchen, Boolean- und Schleifen-Optimierung | |
Wenn Sie wissen wollen, ob und wenn ja, an welcher Position ein bestimmter Wert in einem Array enthalten
ist, bleibt Ihnen nichts anderes übrig, als durch alle einzelnen Feldelemente zu iterieren und die Werte
zu vergleichen, sofern das Array nicht sortiert ist. Häufig wird dies etwa auf folgende Art realisiert:
Das ist schon mal nicht schlecht; die Funktion liefert für ein Array von 0 bis x den Wert -1 zurück,
wenn das Element nicht enthalten ist, ansonsten seine Position.
Die Funktion kann jedoch optimiert werden. So ist die Zeile
überflüssig, da VB eine Boolean-Variable ohnehin mit dem Wert False initialisiert. Ausserdem
kann die Zeile
ein wenig optimiert werden, indem man stattdessen schreibt:
Letztlich ist die Variable Found aber völlig überflüssig, wenn man das Verhalten einer
For ... Next-Schleife konsequent ausnutzt.
Zur Erinnerung: Trifft das Programm erstmals auf For, wird zunächst die Zählervariable (Iterator) initialisiert (im Beispiel: i = l). Dann wird geprüft, ob der Iterator (i) kleiner oder gleich der Obergrenze (u) ist. Wenn nein, wird die Schleife erst gar nicht ausgeführt; wenn ja, wird der Schleifenkörper durchlaufen und der Iterator i am Ende (Next) um 1 erhöht (im Standardfall, wenn keine Step-Klausel angegeben ist). Nun wird wieder geprüft, ob der Iterator kleiner oder gleich der Obergrenze ist. Wenn nein, wird die Schleife nicht mehr weiter ausgeführt, das Programm springt zur nächsten Anweisung nach Next. Daraus folgt, dass der Iterator nach Abarbeitung der For ... Next-Schleife um 1 höher ist als die Obergrenze, wenn die Schleife nicht vorzeitig verlassen wurde (Exit For). Dieses Verhalten macht sich folgende Variante der obigen Routine zunutze und kommt dabei ohne die Boolean-Variable Found aus:
|
|
Hauptseite > Tips zu VB5/6 > diese Seite | |
© 2001-2021 Wolfgang Enzinger |