Functions.AScan 方法 (__Array, __Usual, __Usual) | |
扫描数组直到找到一个值或代码块返回 TRUE。
命名空间:
XSharp.RT
程序集:
XSharp.RT (在 XSharp.RT.dll 中) 版本:2.22 GA
语法 FUNCTION AScan(
aTarget AS ARRAY,
uSearch AS USUAL,
nStart AS USUAL
) AS DWORD
public static uint AScan(
__Array aTarget,
__Usual uSearch,
__Usual nStart
)
查看代码参数
- aTarget
- 类型:__Array
要扫描的数组。 - uSearch
- 类型:__Usual
要扫描的值。
除非此参数是代码块,否则它必须与 aTarget 中元素的数据类型匹配。
- nStart
- 类型:__Usual
起始元素。
负值从末尾开始。
如果 nCount 为正,默认值为1;如果 nCount 为负,默认值为数组的长度。
返回值
类型:
UInt32
如果
uSearch 是代码块,AScan() 返回代码块返回 TRUE 的第一个元素的位置。
否则,AScan() 返回第一个匹配元素的位置。
如果未找到匹配项,AScan() 返回 0。
备注
如果 uSearch 不是代码块,其值会与第一个目标元素比较。
如果不匹配,AScan() 继续处理数组中的下一个元素。
此过程持续进行,直到找到匹配项或扫描范围内的元素耗尽。
如果 uSearch 是代码块,AScan() 扫描 aTarget,对每个访问的元素执行代码块。
每遇到一个元素,AScan() 将元素的值作为参数传递给代码块,然后对代码块执行 Eval()。
当代码块返回 TRUE 或扫描范围内的元素耗尽时,扫描操作停止。
注意:值的比较使用 = 运算符。
对于精确匹配(即使用 == 运算符),请使用 AScanExact()。
示例
此示例演示了扫描一个3元素数组,同时使用字符串和代码块作为搜索条件。
代码块条件展示了如何执行不区分大小写的搜索:
1aArray := {"Tom", "Mary", "Sue"}
2? AScan(aArray, "Mary")
3? AScan(aArray, "mary")
4? AScan(aArray, ;
5 {|x| Upper(x) = "MARY"})
此示例演示了在找到匹配项后扫描搜索参数的多个实例:
1LOCAL aArray := {"Tom", "Mary", "Sue", "Mary"}
2LOCAL nStart := 1
3LOCAL iAtEnd, iPos AS INT
4
5iAtEnd := 4
6DO WHILE (iPos := AScan(aArray, "Mary", nStart)) > 0
7 ? iPos, aArray[iPos]
8
9 IF (nStart += iPos) > iAtEnd
10 EXIT
11 ENDIF
12ENDDO
此示例使用代码块扫描二维数组。注意,代码块中的参数 aVal 是一个数组:
1LOCAL aArr := {}
2AAdd(aArr,{"one", "two"})
3AAdd(aArr,{"three", "four"})
4AAdd(aArr,{"five", "six"})
5? AScan(aArr, {|aVal| aVal[2] = "four"})
参见