我正在尋找有關如何在 C# 中遍歷非常大的“List”的想法和/或改進。
我有一個包含超過400 萬個字串的List<string>命名。
我有一個名為的字串,它是由用戶輸入生成的字串。
我需要檢查用戶輸入(訊息)是否包含串列中的任何字串(排除),如果是,則洗掉在字串中找到的匹配字串。
例子:excludesmessage
private static List<string> excludes = new List<string>(); // --> 4 million entries
string message = "Hello, how are you this fine day?\r\nMy name is SO."; // User input
foreach (string exclude in excludes)
{
if (message.Contains(exclude))
{
message = message.Replace(exclude, "");
}
}
由于串列的大小,這個程序平均需要大約 350 毫秒才能完成。
無論如何,我可以改進我的代碼并減少完成此任務所需的時間嗎?
uj5u.com熱心網友回復:
我會看看布隆過濾器的概念。它幾乎可以作業O(1)并且使用很少的記憶體。
例如,有一個C#代碼示例和一個NuGet 包。
但請注意,它是一種概率資料結構,并不總是產生正確的結果。
uj5u.com熱心網友回復:
您可以將字串加載到 Trie 中。查找一個單詞以查看它是否為排除的單詞最多需要進行 N 次比較,其中 N 是單詞的長度。
以下是一些資源:
https://www.geeksforgeeks.org/trie-insert-and-search/
https://en.wikipedia.org/wiki/Trie
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/330732.html
標籤:C#
上一篇:C#正則運算式如何從字串中排除
