Function Reference


_ArrayBinarySearch

Uses the binary search algorithm to search through a 1D or 2D array

#include <Array.au3>
_ArrayBinarySearch ( Const ByRef $aArray, $vValue [, $iStart = 0 [, $iEnd = 0 [, $iColumn = 0]]] )

Parameters

$aArray Array to search
$vValue Value to find
$iStart [optional] Index of array to start searching at
$iEnd [optional] Index of array to stop searching at
$iColumn [optional] Column of array to search

Return Value

Success: the index that value was found at.
Failure: -1 and sets the @error flag to non-zero.
@error: 1 - $aArray is not an array
2 - $vValue outside of array min/max values
3 - $vValue was not found in array
4 - $iStart is greater than $iEnd
5 - $aArray is not a 1D or 2D array
6 - $aArray is empty
7 - $iColumn outside array bounds

Remarks

When performing a binary search on an array of items, the array (specified column if 2D) MUST be sorted before the search is done. Otherwise undefined results will be returned.

Related

_ArrayFindAll, _ArraySearch

Example

Example 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")

; Search col 0
$iIndex = _ArrayBinarySearch($aArray, "#10", 0, 0, 0)
MsgBox($MB_SYSTEMMODAL, "Index", $iIndex)

; Search col 1
$iIndex = _ArrayBinarySearch($aArray, "#31", 0, 0, 1)
MsgBox($MB_SYSTEMMODAL, "Index", $iIndex)

Example 2

; using an array returned by StringSplit()

#include <Array.au3>
#include <MsgBoxConstants.au3>

Local $avArray = StringSplit("a,b,d,c,e,f,g,h,i", ",")

; sort the array to be able to do a binary search
_ArraySort($avArray, 0, 1) ; start at index 1 to skip $avArray[0]

; display sorted array
_ArrayDisplay($avArray, "$avArray AFTER _ArraySort()")

; start at index 1 to skip $avArray[0]
Local $iKeyIndex = _ArrayBinarySearch($avArray, "c", 1)
If Not @error Then
    MsgBox($MB_SYSTEMMODAL, 'Entry found', ' Index: ' & $iKeyIndex)
Else
    MsgBox($MB_SYSTEMMODAL, 'Entry Not found', ' Error: ' & @error)
EndIf