バイナリサーチアルゴリズムを使用して1次元配列の検索をおこないます。
#Include <Array.au3>
_ArrayBinarySearch(Const ByRef $avArray, $vValue [, $iStart = 0 [, $iEnd = 0]])
パラメータ
$avArray | 検索する配列 |
$vValue | 検索値 |
$iStart | [オプション] 配列の検索開始インデックス |
$iEnd | [オプション] 配列の検索終了インデックス |
返し値
成功:: | 見つかった値のインデックス |
失敗: | -1。@errorを次の値に設定します |
@error: | 1 - $avArrayは配列ではありません |
2 - $vValueが配列の最大/最小値外です | |
3 - $vValueが配列内に見つかりませんでした | |
4 - $iStartが$iEndよりも大きいです | |
5 - $avArrayは1次元配列ではありません |
注意
配列のアイテムに対してバイナリサーチをおこなう場合、検索をおこなう前にアイテムは必ずソートされてなければなりません。
関連
_ArrayFindAll, _ArraySearch
例
#include <Array.au3>
;===============================================================================
例1 (手動で定義した配列を使用)
;===============================================================================
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"
; バイナリサーチが可能なように配列をソート
_ArraySort($avArray)
; ソートした配列を表示
_ArrayDisplay($avArray, "$avArray AFTER _ArraySort()")
; 存在するエントリーを検索
$iKeyIndex = _ArrayBinarySearch($avArray, "Jon")
If Not @error Then
MsgBox(0,'Entry found',' Index: ' & $iKeyIndex)
Else
MsgBox(0,'Entry Not found',' Error: ' & @error)
EndIf
; 存在しないエントリーを検索
$iKeyIndex = _ArrayBinarySearch($avArray, "Unknown")
If Not @error Then
MsgBox(0,'Entry found',' Index: ' & $iKeyIndex)
Else
MsgBox(0,'Entry Not found',' Error: ' & @error)
EndIf
;===============================================================================
例2 (StringSplit()の返す配列を使用)
;===============================================================================
$avArray = StringSplit("a,b,d,c,e,f,g,h,i", ",")
; バイナリサーチが可能なように配列をソート
_ArraySort($avArray, 0, 1) ; $avArray[0]を抜かしてインデックス1から開始
; ソートした配列を表示
_ArrayDisplay($avArray, "$avArray AFTER _ArraySort()")
; $avArray[0]を抜かしてインデックス1から開始
$iKeyIndex = _ArrayBinarySearch($avArray, "c", 1)
If Not @error Then
Msgbox(0,'Entry found',' Index: ' & $iKeyIndex)
Else
Msgbox(0,'Entry Not found',' Error: ' & @error)
EndIf