我想知道如果我在文本文件中有英文字典,檢查給定字符串是否是正確和正確的英文單詞的最佳方法是什麼?我的字典包含大約10萬個英語單詞,我必須一次檢查平均60000個單詞。我只是在尋找最有效的方法。我也應該先存儲所有的字符串,或者只是在生成時處理它們。字符串處理
感謝名單
我想知道如果我在文本文件中有英文字典,檢查給定字符串是否是正確和正確的英文單詞的最佳方法是什麼?我的字典包含大約10萬個英語單詞,我必須一次檢查平均60000個單詞。我只是在尋找最有效的方法。我也應該先存儲所有的字符串,或者只是在生成時處理它們。字符串處理
感謝名單
100K是不是太大的數目,所以你可以放進一Hashset<string>
一切。
Hashset查找是基於密鑰的,所以它會閃電般快速。
例如如何可能看起來在代碼:
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");
}
如果你使用.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
靜態屬性來獲取上,你可以通到HashSet
構造StringComparer
適當的實例。
如果你使用的是.NET 2,你可以使用Dictionary<string, whatever>
作爲一個窮人的套裝 - 基本上使用你喜歡的任何值作爲值,然後檢查密鑰。
編輯迴應說Hashset而不是字典,誤解了問題。 – SWeko