Nutzt einen binären Such-Algorithmus, um ein 1D oder 2D Array zu durchsuchen
#include <Array.au3>
_ArrayBinarySearch ( Const ByRef $aArray, $vValue [, $iStart = 0 [, $iEnd = 0 [, $iColumn = 0]]] )
$aArray | 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. |
$iColumn | [optional] zu durchsuchende Spalte des Arrays |
Erfolg: | der Index wo der Wert im Array gefunden wurde |
Fehler: | -1 und setzt das @error Flag auf ungleich null |
@error: | 1 - $aArray 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 - $aArray ist kein 1D Array 6 - $aArray ist leer 7 - $iColumn außerhalb der Arraygrenzen |
Wenn eine binäre Suche in einem Array durchgeführt werden soll, MUSS der Inhalt in aufsteigender Reihenfolge sortiert werden, bevor die Suche stattfindet. Sonst wird ein undefiniertes Ergebnis zurückgegeben.
Das Array wird durch einen Verweis an die Funktion übergeben, sodass keine weiteren Ressourcen genutzt werden, außer ein paar interner Variablen.
#include <Array.au3>
#include <MsgBoxConstants.au3>
Local $iIndex
Local $aArray[5][2]
For $i = 0 To 4
For $j = 0 To 1
$aArray[$i][$j] = "#" & $i & $j
Next
Next
_ArrayDisplay($aArray, "Array")
; Durchsucht Spalte 0
$iIndex = _ArrayBinarySearch($aArray, "#10", 0, 0, 0)
MsgBox($MB_SYSTEMMODAL, "Index", $iIndex)
; Durchsucht Spalte 1
$iIndex = _ArrayBinarySearch($aArray, "#31", 0, 0, 1)
MsgBox($MB_SYSTEMMODAL, "Index", $iIndex)
;verwendet ein Array, welches durch StringSplit() zurückgegeben wurde
#include <Array.au3>
#include <MsgBoxConstants.au3>
Local $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
Local $iKeyIndex = _ArrayBinarySearch($avArray, "c", 1)
If Not @error Then
MsgBox($MB_SYSTEMMODAL, 'Eintrag wurde gefunden', ' Index: ' & $iKeyIndex)
Else
MsgBox($MB_SYSTEMMODAL, 'Eintrag wurde nicht gefunden', ' Fehler: ' & @error)
EndIf