我正在尝试实现一个简单的搜索功能。我有一个字符串数组,其中包含从用户输入的所有单词以进行搜索。我有另一个字符串,其中包含用户名,内容等数据...所以我要做的是检查名称是否包含搜索或字符串数组中的任何元素。现在我有一个循环,它一次检查一个单词并在IEnumerable中连接结果。
有没有人知道更快的搜索方式?像String.ContainsAny(Search [])
由于
答案 0 :(得分:8)
试试这个......
Search.Any(p => name.Contains(p))
答案 1 :(得分:2)
using System.Linq;
string[] searchItems = ...
string input = "This is the input text";
// Check whether at least one match found
bool matchFound = input.Any(w => input.Contains(w));
// Count all matches
int matchesCount = input.Where(w => input.Contains(w))
.Count();
答案 2 :(得分:1)
string[] searchItems = ...;
string[] userNames = ...;
var matches = userNames.Intersect(searchItems);
您可以找到有关交叉方法here
的更多信息答案 3 :(得分:1)
return array.Any(s => s.Equals(myString))
或尝试这样....
string stringToCheck = "text1";
string[] stringArray = { "text1", "testtest", "test1test2", "test2text1" };
foreach (string x in stringArray)
{
if (x.Contains(stringToCheck))
{
// Process...
}
}
或类似的东西
string stringToCheck = "text1text2text3";
string[] stringArray = new string[] { "text1" };
if (Array.Exists<string>(stringArray, (Predicate<string>)delegate(string s) {
return stringToCheck.IndexOf(s, StringComparison.OrdinalIgnoreCase) > -1; })) {
Console.WriteLine("Found!");
}
答案 4 :(得分:0)
例如,针对此问题的两种解决方案:
解决方案1
private void findDateColumn() {
string stringToCheck = "date";
int stringToCheckIndex = -1;
string elementInArray = "Not Defined or Not Found";
if (Array.Exists<string> (headers, (Predicate<string>) delegate (string s)
{
stringToCheckIndex = s.IndexOf (stringToCheck,StringComparison.OrdinalIgnoreCase);
elementInArray = s;
return stringToCheckIndex > -1;
}))
{
dateColTitle.Text = elementInArray; //a textbox to show the output
}
}
解决方案2
我正在使用@Lev答案,它看起来更简单,更短,而且给出了相同的结果:
private void setDateColumnTitle ()
{
dateColTitle.Text = "Not Defined or Not Found";
var match = headers.FirstOrDefault(c => c.IndexOf("date", StringComparison.OrdinalIgnoreCase) > -1);
if (match!=null)
dateColTitle.Text = match;
}