我希望能够有效地在数组中搜索字符串的内容 示例:
dim arr() as string={"ravi","Kumar","Ravi","Ramesh"}
我传递的值是“ra”,我希望它返回2和3的索引。
如何在VB.NET中执行此操作?
答案 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"))