我想知道如果我在文本文件中有一个英文字典,那么检查给定字符串是否是正确且正确的英文单词的最佳方法是什么。我的词典包含大约100000个英语单词,我必须一次检查平均60000个单词。我只是在寻找最有效的方式。我也应该先存储所有字符串,或者只是在生成时处理它们。
感谢名单
答案 0 :(得分:6)
100k不是太大的数字,所以你可以在Hashset<string>
中弹出所有内容。
哈希集查找是基于密钥的,所以它会很快。
示例在代码中的外观如下:
string[] lines = File.ReadAllLines(@"C:\MyDictionary.txt");
HashSet<string> myDictionary = new HashSet<string>();
foreach (string line in lines)
{
myDictionary.Add(line);
}
string word = "aadvark";
if (myDictionary.Contains(word))
{
Console.WriteLine("There is an aadvark");
}
else
{
Console.WriteLine("The aadvark is a lie");
}
答案 1 :(得分:1)
如果您使用的是.NET 3.5或更高版本,则应该使用HashSet<string>
。
只需将有效单词的词典加载到HashSet<string>
中,然后在每个候选字符串上使用Contains
,或者使用一些集合运算符来查找所有无效的单词。
例如:
// There are loads of ways of loading words from a file, of course
var valid = new HashSet<string>(File.ReadAllLines("dictionary.txt"));
var candidates = new HashSet<string>(File.ReadAllLines("candidate.txt"));
var validCandidates = candidates.Intersect(valid);
var invalidCandidates = candidates.Except(valid);
您可能还希望使用不区分大小写的比较或类似的东西 - 使用StringComparer
静态属性来获取StringComparer
的适当实例,您可以将其传递给HashSet
构造函数。
如果您使用的是.NET 2,则可以使用Dictionary<string, whatever>
作为穷人的设置 - 基本上使用您喜欢的任何值作为值,并检查密钥。