在vb.net中搜索数组

时间:2009-03-28 11:13:52

标签: vb.net

Hai我使用搜索数组代码索引= Array.IndexOf(_arrayName,“Text”)。我充分说明这项工作正常。但是给出一些不起作用的角色。例如

dim arr() as string ={"ravi","somu","arul"}

这里   我给“somu”代码返回1。  但我给“so”代码返回-1。 但我想要搜索。 这是否可以。

1 个答案:

答案 0 :(得分:8)

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))

修改以澄清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)

当然,如果我们这样做,我们必须将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