編集:私はいくつかの非常に良い提案を受け取りました。それらを検討し、ある時点で回答を受け入れようとします
不要な単語のリスト(最終的には冒涜的ですが、何でもかまいません)を可能な限り迅速にフィルタリングしたい文字列(800k)の大きなリストがあります。
最終的に見たい結果は、次のようなリストになります
Hello,World,My,Name,Is,Yakyb,Shell
になるだろう
World,My,Name,Is,Yakyb
チェックされた後
Hell,Heaven.
これまでの私のコードは
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;
}
これは現在、800kワードを処理するのに約2.3秒(並列なしで9.5秒)かかりますが、これは1回限りのことであり、大したことではありません. しかし、学習プロセスとして、処理のより迅速な方法はありますか?
不要な単語のリストは 100 単語の長さです どの
単語にも句読点やスペースが含まれていません
- すべてのリストで重複を削除するための手順
- 配列の操作が速いかどうかを確認するステップ (そうではない) 興味深いことに、パラメーターの単語を文字列 [] に変更すると、25% 遅くなります
- AsParallel() を追加するステップにより、時間が ~2.3 秒に短縮されました