2011-01-26 101 views
0

我想知道如果我在文本文件中有英文字典,檢查給定字符串是否是正確和正確的英文單詞的最佳方法是什麼?我的字典包含大約10萬個英語單詞,我必須一次檢查平均60000個單詞。我只是在尋找最有效的方法。我也應該先存儲所有的字符串,或者只是在生成時處理它們。字符串處理

感謝名單

回答

6

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"); 
} 
+0

編輯迴應說Hashset而不是字典,誤解了問題。 – SWeko

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靜態屬性來獲取上,你可以通到HashSet構造StringComparer適當的實例。

如果你使用的是.NET 2,你可以使用Dictionary<string, whatever>作爲一個窮人的套裝 - 基本上使用你喜歡的任何值作爲值,然後檢查密鑰。