编辑:我已经收到了一些非常好的建议,我将试图通过他们的工作,并接受一个答案在某些时候过滤器的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