我想實現一個簡單的搜索功能。我有一個字符串數組,其中包含從用戶輸入的所有單詞以供搜索。我有另一個字符串,其中包含用戶名,內容等數據...所以我想要做的是檢查是否包含搜索或字符串數組中的任何元素。現在我有一個循環,每次檢查一個單詞並將結果連接到一個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()。根據數組創建的時間/方式以及數組在多少次重複使用而不重建的情況,可以先將它排序,然後使用不同的算法進行搜索。但是在我們能夠推薦最佳算法之前,我們需要更多的上下文。 –