Functions.AScanT 方法 (__ArrayBaseT, FuncT, Boolean, Int32, Int32) | |
扫描数组直到找到一个值或代码块返回 TRUE。
命名空间:
XSharp.RT
程序集:
XSharp.RT (在 XSharp.RT.dll 中) 版本:2.22 GA
语法 FUNCTION AScan<T>(
aTarget AS ARRAY OF<T>,
act AS Func<T, LOGIC>,
nStart AS LONG,
nCount AS LONG
)
AS DWORD
public static uint AScan<T>(
__ArrayBase<T> aTarget,
Func<T, bool> act,
int nStart,
int nCount
)
查看代码参数
- aTarget
- 类型:__ArrayBaseT
要扫描的数组。 - act
- 类型:FuncT, Boolean
- nStart
- 类型:Int32
起始元素。
负值从末尾开始。
如果 nCount 为正,默认值为1;如果 nCount 为负,默认值为数组的长度。
- nCount
- 类型:Int32
从 nStart 开始处理的元素数。
负值从末尾开始。
默认为数组末尾的所有元素。
类型参数
- T
- The type of the array elements
返回值
类型:
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"})
参见