rah*_*kim 3 string search c#-2.0
我正在努力寻找最简单的方法来搜索string
可能的string
s 数组.我知道为角色做这个的简单方法就是使用myString.IndexOfAny(charArray)
.但是,如果我想搜索我string
的string
s而不仅仅是角色呢?是否有任何.net技巧或方法使这更容易?
基本上,我想做这样的事情:
string myName = "rahkim";
string[] names = new string[] {"joe","bob","chris"};
if(myName.IndexOfAny(names) >= 0)
{
//success code//
}
Run Code Online (Sandbox Code Playgroud)
我知道有很多方法可以用循环等来做到这一点.但我希望框架中固有的东西.
Sam*_*uel 10
您应该定义是否要查找相等的字符串或搜索匹配的子字符串.这两种方式都很容易预LINQ和LINQ.
string myName = "rahkim";
string[] names = new string[] { "joe", "bob", "chris" };
Run Code Online (Sandbox Code Playgroud)
LINQ等同字符串
bool contains = names.Contains(myName);
Run Code Online (Sandbox Code Playgroud)
LINAL之前的平等字符串
bool contains = new List<string>(name).Contains(myName);
Run Code Online (Sandbox Code Playgroud)
子串,LINQ
bool contains = names.Any(name => name.Contains(myName));
Run Code Online (Sandbox Code Playgroud)
子串,Pre-LINQ
bool contains = false;
foreach(string name in names)
if (name.Contains(myName))
contains = true;
Run Code Online (Sandbox Code Playgroud)
如果其他人在尝试搜索像String.IndexOfAny(String [])这样的.Net方法时发现了这个,这是我的解决方案:
C#
public int IndexOfAny(string test, string[] values)
{
int first = -1;
foreach (string item in values) {
int i = test.IndexOf(item);
if (i >= 0) {
if (first > 0) {
if (i < first) {
first = i;
}
} else {
first = i;
}
}
}
return first;
}
Run Code Online (Sandbox Code Playgroud)
VB
Public Function IndexOfAny(test As String, values As String()) As Integer
Dim first As Integer = -1
For Each item As String In values
Dim i As Integer = test.IndexOf(item)
If i >= 0 Then
If first > 0 Then
If i < first Then
first = i
End If
Else
first = i
End If
End If
Next
Return first
End Function
Run Code Online (Sandbox Code Playgroud)
您可以通过切换来执行LastIndexOfAny(String [])
i < first
Run Code Online (Sandbox Code Playgroud)
至
i > first
Run Code Online (Sandbox Code Playgroud)
您也可以使用类的static
IndexOf
方法Array
:
bool hasName = Array.IndexOf(names, myName) > -1;
Run Code Online (Sandbox Code Playgroud)