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]]] )
$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 |
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 |
When performing a binary search on an array of items, the array (specified column if 2D) MUST be sorted in ASCENDING order before the search is done. Otherwise undefined results will be returned.
#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)
; 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