Funktionsreferenz

_ArrayBinarySearch

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.

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


#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