編輯:我已經收到了一些非常好的建議,我將試圖通過他們的工作,並接受一個答案在某些時候過濾器的IEnumerable <string>不需要的字符串
我有一個字符串(800K)的大名單,我想要在儘可能快的時間內過濾不需要的單詞列表(最終褻瀆但可能是任何東西)。
結果我最終希望看到的將是一個清單,如
Hello,World,My,Name,Is,Yakyb,Shell
將被覈對
Hell,Heaven.
到目前爲止我的代碼是後成爲
World,My,Name,Is,Yakyb
var words = items
.Distinct()
.AsParallel()
.Where(x => !WordContains(x, WordsUnwanted));
public static bool WordContains(string word, List<string> words)
{
for (int i = 0; i < words.Count(); i++)
{
if (word.Contains(words[i]))
{
return true;
}
}
return false;
}
這是目前需要約2.3秒(9.5瓦/平行)來處理800k字,作爲一個關閉是沒有什麼大不了的。然而,作爲一個學習過程,還有更快的處理方式嗎?
的不受歡迎的詞彙表是100個字的長
沒有的話包含標點符號或空格注意消除重複所有列表中
- 一步,看是否與陣列工作更快(它不)有趣的改變參數字爲字符串[]使它慢25%
- 步驟添加進行AsParallel()減少的時間來〜2.3秒
是否要保留輸入中的訂單和/或重複項? – dtb 2013-02-22 22:36:41
'shell'也會消失還是過濾詞只是在開頭? – keyboardP 2013-02-22 22:41:24
你真的想按照你方法的建議('word.contains')去除單詞部分位於「不想要的單詞」列表中的單詞嗎? – 2013-02-22 22:45:08