【发布时间】:2021-06-02 16:31:42
【问题描述】:
我有一个巨大的字符串列表_wordList List<string>,其中包含大约 100,000 个值。我遇到的问题是我还需要在其中有多个嵌套循环。嵌套循环也是一个列表,但其结构仅包含变量,包含大约 0-100 个值,具体取决于发生的情况
for (int y = 0; y < _wordList.Count; y++)
{
string word = _wordList[y];
for(int x = 0; x < _secondWordList.Count; x++)
{
if (!word.Contains(_secondWordList[x].Word) || word == _secondWordList[x].Word)
continue;
// do other stuff
}
}
这是代码的一部分,我不会发布所有代码,因为其中大部分都无关紧要,但在第二个循环中,我还有大约 2 个其他短循环,整个函数在 350-600 毫秒内完成。优化循环的最佳方法是什么? word.Contains 也会对性能产生大约 100-150 毫秒的影响。
【问题讨论】:
-
是错字吗?
compareString在第二个(顺便说一下,也是第一个)循环中看起来是不变的,因此您可以将`if`移到嵌套循环之外。 -
这是一个错字,我的错
-
这些列表包含什么?你显然不是在说关于
_wordList的真相,因为你在那些“词”中搜索(至少)词,所以它们是句子,但你说的是关于第二个列表的真相吗?第二个列表是由整个单词组成的吗? -
如果是句子,您可以将它们拆分为单词,并根据原始单词的哈希表检查它们,但是如果您有字母汤,那么您无能为力。除非您更详细地描述如何使用它(因为现在听起来没用),否则您也不会获得任何特定领域的优化。
-
!word.Contains(_secondWordList[x].Word) || word == _secondWordList[x].Word很奇怪,也许你的意思是... && word != ...。您很可能可以通过交换条件来加快速度。
标签: c# optimization