我想实现一个简单的搜索功能。我有一个字符串数组,其中包含从用户输入的所有单词以供搜索。我有另一个字符串,其中包含用户名,内容等数据...所以我想要做的是检查是否包含搜索或字符串数组中的任何元素。现在我有一个循环,每次检查一个单词并将结果连接到一个IEnumerable中。C#如何检查一个字符串是否包含字符串数组中的任何元素?
有没有人知道一个更快的方式来做这个搜索?像String.ContainsAny(搜索[])
感谢
我想实现一个简单的搜索功能。我有一个字符串数组,其中包含从用户输入的所有单词以供搜索。我有另一个字符串,其中包含用户名,内容等数据...所以我想要做的是检查是否包含搜索或字符串数组中的任何元素。现在我有一个循环,每次检查一个单词并将结果连接到一个IEnumerable中。C#如何检查一个字符串是否包含字符串数组中的任何元素?
有没有人知道一个更快的方式来做这个搜索?像String.ContainsAny(搜索[])
感谢
尝试......
Search.Any(p => name.Contains(p))
'有没有人知道做这种搜索的更快的方法?'是不是有问题的算法?真的更快? –
据我所知,默认对象提供程序Any()方法执行线性搜索,直到它罚款一个。所以最坏的情况是O(N)。 –
我正在执行它,但混乱。代码中的'p'是什么意思?谢谢 – user1034489
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();
我很困惑...''searchItems'永远不会用在你的代码中。 –
string[] searchItems = ...;
string[] userNames = ...;
var matches = userNames.Intersect(searchItems);
你可以找到更多有关交叉法here
你可以这样做...
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!");
}
你会如何调整你的第一个版本以允许不变的比较? –
这是阵列预排序,我们确实是有意义的,你的情况?这将改变“最佳”算法。 –
它的随机性,所以搜索可以搜索= [“管理”,“你好”],我必须搜索一个字符串=“这是我的帖子,你好”。 – user1034489
没有任何种类的排序,比我不知道任何比简单的线性搜索更快的算法,尽可能多的答案使用Any()。根据数组创建的时间/方式以及数组在多少次重复使用而不重建的情况,可以先将它排序,然后使用不同的算法进行搜索。但是在我们能够推荐最佳算法之前,我们需要更多的上下文。 –