簡體   English   中英

什么是 C# 中最有效的集合 class 用於字符串搜索

[英]What is the most efficient collection class in C# for string search

string[] words = System.IO.File.ReadAllLines("word.txt");
var query = from word in words
            where word.Length > "abe".Length && word.StartsWith("abe")
            select word;
foreach (var w in query.AsParallel())
{
    Console.WriteLine(w);
}

基本上 word.txt 包含 170000 個英文單詞。 C# 中的集合 class 是否比上述查詢的字符串數組更快? 不會插入或刪除,只需搜索字符串是否以“abe”或“abdi”開頭。

文件中的每個單詞都是唯一的。

EDIT 1此搜索可能會在我的應用程序中執行數百萬次。 另外我想堅持使用 LINQ 進行集合查詢,因為我可能需要使用聚合 function。

EDIT 2文件中的單詞已經排序,文件不會改變

我自己會創建一個Dictionary<char, List<string>> ,在其中按單詞的第一個字母對單詞進行分組。 這將大大減少對所需單詞的查找。

如果您需要在沒有什么比線性搜索更好的情況下進行搜索 - 數組非常適合它。

如果您需要執行重復搜索,您可以考慮對數組進行排序(n Log n),並且通過任何前綴搜索都會很快(long n)。 根據搜索類型,使用按前綴索引的字符串列表字典可能是另一個不錯的選擇。

如果您經常搜索而不是用單詞更改文件。 每次更改列表時,您都可以對文件中的單詞進行排序。 在此之后,您可以使用二等分搜索。 因此,您必須進行多達 20 次比較才能找到任何與您的鍵匹配的單詞以及一些其他的鄰域比較。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM