Nutzt einen binären Such-Algorithmus, um ein 1-dimensionales Array zu durchsuchen.
#Include <Array.au3>
_ArrayBinarySearch(Const ByRef $avArray, $vValue [, $iStart = 0 [, $iEnd = 0]])
Parameter
| $avArray | Das zu durchsuchende Array. |
| $vValue | Wert nach dem im Array gesucht werden soll. |
| $iStart | [optional] Basis zur Sortierung. |
| $iEnd | [optional] Index des Arrays bei der die Suche beendet werden soll. |
Rückgabewert
| Erfolg: | Index wo der Wert im Array gefunden wurde. |
| Fehler: | -1, setzt @error |
| @error: | 1 - $avArray ist kein Array |
| 2 - $vValue außerhalb der min und max Werte des Arrays | |
| 3 - $vValue wurde im Array nicht gefunden | |
| 4 - $iStart ist größer als $iEnd | |
| 5 - $avArray ist kein 1-dimensionales Array |
Bemerkungen
Wenn eine binäre Suche in einem Array durchgeführt werden soll, MUSS der Inhalt sortiert werden, bevor die Suche stattfindet. Sonst wird ein undefiniertes Ergebnis zurückgegeben.
Verwandte Funktionen
_ArrayFindAll, _ArraySearch
Beispiel
#include <Array.au3>
;===============================================================================
; Beispiel 1 (verwendet ein selbstdefiniertes Array)
;===============================================================================
Local $avArray[10]
$avArray[0] = "JPM"
$avArray[1] = "Holger"
$avArray[2] = "Jon"
$avArray[3] = "Larry"
$avArray[4] = "Jeremy"
$avArray[5] = "Valik"
$avArray[6] = "Cyberslug"
$avArray[7] = "Nutster"
$avArray[8] = "JdeB"
$avArray[9] = "Tylo"
; Sortiert das Array so, dass eine binäre Suche möglich ist
_ArraySort($avArray)
; Zeigt das sortierte Array
_ArrayDisplay($avArray, "$avArray NACH _ArraySort()")
; Nach einem existierenden Eintrag suchen
$iKeyIndex = _ArrayBinarySearch($avArray, "Jon")
If Not @error Then
MsgBox(0, 'Eintrag wurde gefunden', ' Index: ' & $iKeyIndex)
Else
MsgBox(0, 'Eintrag wurde nicht gefunden', ' Fehler: ' & @error)
EndIf
; Nach einem nicht existierenden Eintrag suchen
$iKeyIndex = _ArrayBinarySearch($avArray, "Unknown")
If Not @error Then
MsgBox(0, 'Eintrag wurde gefunden', ' Index: ' & $iKeyIndex)
Else
MsgBox(0, 'Eintrag wurde nicht gefunden', ' Fehler: ' & @error)
EndIf
;===============================================================================
; Beispiel 2 (verwendet ein Array, welches durch StringSplit() zurückgegeben wurde)
;===============================================================================
$avArray = StringSplit("a,b,d,c,e,f,g,h,i", ",")
; Sortiert das Array so, dass eine binäre Suche möglich ist
_ArraySort($avArray, 0, 1) ; Startet bei Index 1, um $avArray[0] zu umgehen
; Zeigt das sortierte Array
_ArrayDisplay($avArray, "$avArray NACH _ArraySort()")
; Startet bei Index 1, um $avArray[0] zu umgehen
$iKeyIndex = _ArrayBinarySearch($avArray, "c", 1)
If Not @error Then
MsgBox(0, 'Eintrag wurde gefunden', ' Index: ' & $iKeyIndex)
Else
MsgBox(0, 'Eintrag wurde nicht gefunden', ' Fehler: ' & @error)
EndIf