【发布时间】:2016-05-29 14:10:38
【问题描述】:
case 15: {
for (int i = 0; i < words.Count; i++) {
if (words[i].Length == 8) {
var tupled = words[i].ConcatCheck();
for (int n = 0; n < word.Count; n++)
if (word[n] == tupled.Item1 || word[n] == tupled.Item2)
temp++;
}
if (temp >= 2)
matches.Add(words[i]);
temp = 0;
}
break;
}
它的作用:
第一个“for 循环”遍历包含大约 248000 个元素长的词的 List,检查长度为 8 的词。
当找到一个时,我通过调用 ConcatCheck() 方法(我为 obj String 编写的扩展方法)创建了单词的前半部分和后半部分(每半部分 4 个字母)的 Tuple。那部分又快又好。
真正需要工作的是第二个“for 循环”。每一个 8 个字母的单词都会激活这个循环,它会遍历更大的 List 大约 267000 个元素,检查 Tuple 的两个项目是否存在。如果两者都找到,我会将原始单词添加到“匹配”列表中。
这部分需要将近 3 分钟才能找到我拥有的 248k 字典中的所有匹配项。有什么方法可以优化/加速它?
【问题讨论】:
-
专门检查 Linq 和 Plinq
-
目标?:返回一个仅包含唯一单词的列表?返回每个唯一单词及其出现次数?目标到底是什么?
word是什么,它总是相同的输入词还是每 X 次迭代都会改变? -
那么......你想找到由两个 4 个字母单词组成的所有 8 个字母单词吗?