如何在VB.NET中搜索数组?

时间:2009-03-30 13:44:21

标签: vb.net arrays

我希望能够有效地在数组中搜索字符串的内容 示例:

dim arr() as string={"ravi","Kumar","Ravi","Ramesh"}

我传递的值是“ra”,我希望它返回2和3的索引。

如何在VB.NET中执行此操作?

9 个答案:

答案 0 :(得分:16)

目前还不清楚如何搜索数组。以下是一些替代方案:

查找包含确切字符串“Ra”的所有项目(返回项目2和3):

Dim result As String() = Array.FindAll(arr, Function(s) s.Contains("Ra"))

查找以精确字符串“Ra”开头的所有项目(返回项目2和3):

Dim result As String() = Array.FindAll(arr, Function(s) s.StartsWith("Ra"))

查找包含任何案例版本“ra”的所有项目(返回项目0,2和3):

Dim result As String() = Array.FindAll(arr, Function(s) s.ToLower().Contains("ra"))

查找以“ra”的任何案例版本开头的所有项目(重新调整项目0,2和3):

Dim result As String() = Array.FindAll(arr, Function(s) s.ToLower().StartsWith("ra"))

-

如果您没有使用VB 9+,那么您没有匿名函数,因此您必须创建一个命名函数。

示例:

Function ContainsRa(s As String) As Boolean
   Return s.Contains("Ra")
End Function

用法:

Dim result As String() = Array.FindAll(arr, ContainsRa)

拥有一个只能与特定字符串进行比较的函数并不总是非常有用,所以为了能够指定要比较的字符串,您必须将它放在一个类中以存储字符串:< / p>

Public Class ArrayComparer

   Private _compareTo As String

   Public Sub New(compareTo As String)
      _compareTo = compareTo
   End Sub

   Function Contains(s As String) As Boolean
      Return s.Contains(_compareTo)
   End Function

   Function StartsWith(s As String) As Boolean
      Return s.StartsWith(_compareTo)
   End Function

End Class

用法:

Dim result As String() = Array.FindAll(arr, New ArrayComparer("Ra").Contains)

答案 1 :(得分:3)

Dim inputString As String = "ra"
Enumerable.Range(0, arr.Length).Where(Function(x) arr(x).ToLower().Contains(inputString.ToLower()))

答案 2 :(得分:2)

如果您想要经常重复的有效搜索,请先对数组进行排序(Array.Sort),然后再使用Array.BinarySearch

答案 3 :(得分:2)

如果您正在寻找旧版本的.NET,请使用:

Module Module1

    Sub Main()
        Dim arr() As String = {"ravi", "Kumar", "Ravi", "Ramesh"}
        Dim result As New List(Of Integer)
        For i As Integer = 0 To arr.Length
            If arr(i).Contains("ra") Then result.Add(i)
        Next
    End Sub

End Module

答案 4 :(得分:2)

检查一下..

        string[] strArray = { "ABC", "BCD", "CDE", "DEF", "EFG", "FGH", "GHI" };
        Array.IndexOf(strArray, "C"); // not found, returns -1
        Array.IndexOf(strArray, "CDE"); // found, returns index

答案 5 :(得分:1)

如果匹配输入,则比较数组中的属性,然后将某些内容设置为循环当前位置的值,这也是当前查找项目的索引。

简单例如。

dim x,y,z as integer
dim aNames, aIndexes as array
dim sFind as string
for x = 1 to length(aNames)

    if aNames(x) = sFind then y = x

y然后是数组中项目的索引,然后循环可以用来将它们存储在一个数组中,所以代替上面你会有:

z = 1
for x = 1 to length(aNames)
    if aNames(x) = sFind then 
        aIndexes(z) = x 
        z = z + 1
    endif

答案 6 :(得分:0)

<强> VB

Dim arr() As String = {"ravi", "Kumar", "Ravi", "Ramesh"}
Dim result = arr.Where(Function(a) a.Contains("ra")).Select(Function(s) Array.IndexOf(arr, s)).ToArray()

<强> C#

string[] arr = { "ravi", "Kumar", "Ravi", "Ramesh" };
var result = arr.Where(a => a.Contains("Ra")).Select(a => Array.IndexOf(arr, a)).ToArray();

----- ------详细

Module Module1

    Sub Main()
        Dim arr() As String = {"ravi", "Kumar", "Ravi", "Ramesh"}
        Dim searchStr = "ra"
        'Not case sensitive - checks if item starts with searchStr
        Dim result1 = arr.Where(Function(a) a.ToLower.StartsWith(searchStr)).Select(Function(s) Array.IndexOf(arr, s)).ToArray
        'Case sensitive - checks if item starts with searchStr
        Dim result2 = arr.Where(Function(a) a.StartsWith(searchStr)).Select(Function(s) Array.IndexOf(arr, s)).ToArray
        'Not case sensitive - checks if item contains searchStr
        Dim result3 = arr.Where(Function(a) a.ToLower.Contains(searchStr)).Select(Function(s) Array.IndexOf(arr, s)).ToArray
        Stop
    End Sub

End Module

答案 7 :(得分:0)

切勿使用 .ToLower 和 .ToUpper。

我刚刚在土耳其遇到了问题,其中有 4 个“i”字母。使用 ToUpper 时,我得到了错误的“Ì”,它失败了。

使用不变字符串比较: Const LNK as String = "LINK" Dim myString = "链接"

不好: 如果 myString.ToUpper = LNK 那么...

好并且在全世界都有效: 如果 String.Equals(myString, LNK , StringComparison.InvariantCultureIgnoreCase) 那么...

答案 8 :(得分:-1)

这样就可以了,返回索引0,2和3的值。

Array.FindAll(arr, Function(s) s.ToLower().StartsWith("ra"))