Functions.AScanBin 方法 | |
扫描已排序的数组,直到找到一个值或代码块返回0。
命名空间:
XSharp.RT
程序集:
XSharp.RT (在 XSharp.RT.dll 中) 版本:2.22 GA
语法 FUNCTION AScanBin(
aTarget AS ARRAY,
uSearch AS USUAL
) AS DWORD
public static uint AScanBin(
__Array aTarget,
__Usual uSearch
)
查看代码参数
- aTarget
- 类型:__Array
要扫描的已排序数组。 - uSearch
- 类型:__Usual
要扫描的值。
除非此参数是代码块,否则它必须与aTarget中元素的数据类型匹配。
如果uSearch是代码块,它应返回一个数值,表示比较的结果:正值表示uSearch大于当前数组元素,0表示相等,负值表示uSearch小于当前数组元素。
返回值
类型:
UInt32
如果
uSearch是代码块,AScanBin()在代码块返回零值时返回元素的位置。
否则,AScanBin()返回匹配元素的位置。
如果存在多个相同的元素,由于AScanBin()使用二分查找算法,返回的匹配项不一定是编号最小的元素。
如果未找到匹配项,AScanBin()返回0。
备注
AScanBin()扫描数组以查找指定值。
如果uSearch是代码块,AScanBin()使用二分查找算法扫描aTarget,并对每个访问的元素执行代码块。
每遇到一个元素,AScanBin()将元素的值作为参数传递给代码块,然后对代码块执行Eval()。
当代码块返回零值或扫描范围内的元素耗尽时,扫描操作停止。
注意:值的比较使用=运算符。
对于精确匹配(即使用==运算符),请使用AScanBinExact()。
示例
此示例演示了使用字符串和代码块作为搜索条件扫描3元素数组。
代码块条件展示了如何执行不区分大小写的搜索:
1aArray := {"Tom", "Mary", "Sue"}
2ASort(aArray)
3? AScanBin(aArray, "Mary")
4? AScanBin(aArray, "mary")
5? AScanBin(aArray, ;
6 {|x| MyCompare(x, "MARY")})
7FUNCTION MyCompare(cElement, cSearch) AS SHORTINT
8 LOCAL siRet := 0 AS SHORTINT
9 cElement := Upper(cElement)
10 IF cSearch > cElement
11 siRet := 1
12 ELSEIF cSearch < cElement
13 siRet := -1
14
15 ENDIF
16 RETURN siRet
参见