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

发布于 2024-11-04 04:50:47 字数 539 浏览 0 评论 0 原文

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# 中是否有一个集合类比字符串数组更快?不会进行插入或删除,只是搜索字符串是否以“abe”或“abdi”开头。

文件中的每个单词都是唯一的。

编辑1 此搜索可能会在我的应用程序中执行数百万次。另外,我想坚持使用 LINQ 进行集合查询,因为我可能需要使用聚合函数。

EDIT 2 文件中的单词已经排序,文件不会改变

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);
}

Basically the word.txt contains 170000 English words. Is there a collection class in C# that is faster than array of string for the above query? There will be no insert or delete, just search if a string starts with "abe" or "abdi".

Each word in the file is unique.

EDIT 1 This search will be performed potentially millions of times in my application. Also I want to stick with LINQ for collection query because I might need to use aggregate function.

EDIT 2 The words from the file are sorted already, the file will not change

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

糖粟与秋泊 2024-11-11 04:50:47

我自己会创建一个 Dictionary>,在其中按单词的第一个字母对单词进行分组。这将大大减少所需单词的查找。

myself I'd create a Dictionary<char, List<string>>, where I'd group words by their first letter. This will reduce substantially the lookup of needed word.

丢了幸福的猪 2024-11-11 04:50:47

如果您需要进行搜索,那么没有什么比线性搜索更好的了 - 数组非常适合。

如果需要执行重复搜索,可以考虑对数组进行排序(n Log n),并且按任何前缀搜索都会很快(long n)。根据搜索类型,使用按前缀索引的字符串列表字典可能是另一个不错的选择。

If you need to do search once there is nothing better than linear search - array is perfectly fine for it.

If you need to perform repeated searches you can consider soring the array (n Log n) and search by any prefix will be fast (long n). Depending on type of search using dictionary of string lists indexed by prefix may be another good option.

我不会写诗 2024-11-11 04:50:47

如果您经常搜索而不是用单词更改文件。每次更改列表时,您都可以对文件中的单词进行排序。之后您可以使用二分搜索。因此,您将需要进行最多 20 次比较才能找到与您的关键字匹配的任何单词,并进行一些额外的邻居比较。

If you search much often than you change a file with words. You can sort words in file every time you change list. After this you can use bisectional search. So you will have to make up to 20 comparisons to find any word witch match with your key and some additional comparisons of neighborhood.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文