Funktionreferenz


_ArrayBinarySearch

Beschreibung anzeigen in

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]]] )

Parameter

$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

Rückgabewert

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

Bemerkungen

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.

Verwandte Funktionen

_ArrayFindAll, _ArraySearch

Beispiel

Beispiel 1

#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)

Beispiel 2

;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