Hai我使用搜索数组代码索引= Array.IndexOf(_arrayName,"Text").我充分说明这项工作正常.但是给出一些不起作用的角色.例如
dim arr() as string ={"ravi","somu","arul"}
Run Code Online (Sandbox Code Playgroud)
这里我给"somu"代码返回1.但我给"so"代码返回-1.但我想要搜索.这是否可以通过.
IndexOf搜索完全匹配.要自定义匹配条件,可以使用以下FindIndex方法:
// Finds first element of the array that contains `inputString`
Array.FindIndex(arr, Function(s) s.Contains(inputString))
// Finds first element of the array that begins with `inputString`
Array.FindIndex(arr, Function(s) s.StartsWith(inputString))
Run Code Online (Sandbox Code Playgroud)
编辑澄清Function(s)和lambdas:
Array.FindIndex接受两个参数,第一个是你想要处理的数组,后者是一个Delegate表示要检查的谓词.
FindIndex你不知道你想要什么样的元素.它使您可以灵活地指定它.你通过传入一个带有数组元素的函数来告诉它,并返回一个指示你是否想要它的布尔值.它本质上用数组的每个元素调用该函数,并返回该函数返回true的第一个元素的索引.
AddressOf MyPredicate我们可以轻松地使用Function(s) s.Contains(inputString).而不是编写整个函数并使用它.它相当于:
Function MyPredicate(s As String) As Boolean
Return s.Contains(inputString)
End Function
Array.FindIndex(arr, AddressOf MyPredicate)
Run Code Online (Sandbox Code Playgroud)
当然,如果我们这样做,我们必须存储inputString该方法可访问的地方.这是很多脏代码.lambda表达式减少了所有这些麻烦.
编辑2:
我可以验证此代码打印"1":
Module Module1
Sub Main()
Dim arr() As String = {"ravi", "somu", "arul"}
Console.WriteLine(Array.FindIndex(arr, Function(s) s.Contains("so")))
End Sub
End Module
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4513 次 |
| 最近记录: |