我正在尝试实现一个简单的搜索功能。我有一个字符串数组,其中包含用户输入的所有单词以进行搜索。我还有另一个字符串,其中包含用户名称、内容等数据...所以我想做的是检查名称是否包含搜索或字符串数组中的任何元素。目前,我有一个循环,逐个检查单词,并将结果连接在 IEnumerable 中。
有没有人知道更快的搜索方法?像 String.ContainsAny(Search[]) 这样的方法?
有没有人知道更快的搜索方法?像 String.ContainsAny(Search[]) 这样的方法?
试试这个:
Search.Any(p => name.Contains(p))
name.Contains(p)
)——这就是整个方法体。想要了解更多信息,请阅读关于LINQ如何工作的内容。 - Jon Adamsusing 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();
searchItems
在你的代码中从未被使用过。 - Mr. Boystring[] searchItems = ...;
string[] userNames = ...;
var matches = userNames.Intersect(searchItems);
关于intersect方法,您可以在这里找到更多信息这里
你可以这样做...
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!");
}
例如,这个问题有两种解决方案:
解决方案1
private void findDateColumn() {
string stringToCheck = "date";
int stringToCheckIndex = -1;
string elementInArray = "未定义或未找到";
if (Array.Exists<string> (headers, (Predicate<string>) delegate (string s)
{
stringToCheckIndex = s.IndexOf (stringToCheck,StringComparison.OrdinalIgnoreCase);
elementInArray = s;
return stringToCheckIndex > -1;
}))
{
dateColTitle.Text = elementInArray; //一个文本框来显示输出
}
}
解决方案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;
}