在 C++ 中,我使用嵌套的 for 循环来匹配具有相同名称的对象对。我预计程序需要很长时间才能运行(比较数千个字符串),但随着它的进展,程序运行速度越来越慢。它会在几分钟内比较前 20% 的字符串,但一旦完成大约 30%,就需要将近 60 秒来检查一个字符串与其他字符串。
我的“新数据”包含字段“feas”、“eff”和“numIdeas”的正确值,而我的旧数据与匹配的“新”伙伴共享“数据”字段。新数据和旧数据的顺序不同,我无法对它们进行排序,因为它们当前所处的顺序是有意义的。我认为最好的方法是通过它“蛮力”。就像我说的那样,它们没有特定的顺序,所以循环迭代的极度减慢让我感到困惑。据我所知,速度应该保持不变。
for(int i=0; i< newDO.getNumItems(); i++)
{
Item newItem = newDO.getItem(i);
for(int k=0; k < oldDO.getNumItems(); k++)
{
Item oldItem = oldDO.getItem(k);
if(oldItem.getType()==1)
{
bool same = testStrings(oldItem.getData(), newItem.getData());
if(same)
{
oldItem.setFeas(newItem.getFeas());
oldItem.setEff(newItem.getEff());
oldItem.setNumIdeas(newItem.getNumIdeas());
break;
}
}
}
}
我没有写这个testStrings
函数,但我没有看到任何真正的问题。此函数接受字符串(大约 5-20 个字符)并取出所有空格和 '('。
(据我了解,在我之前的那个人已经导入了数千个文件,然后才意识到解析它们的函数没有从某些数据中正确删除'(',所以他对此的解决方法是在检查是否字符串相等)。
bool testStrings(string s1, string s2)
{
string s1def ="";
for(int i=0; i<s1.length(); i++)
{
if(s1[i]!=' ' || s1[i]!=')'){s1def+=s1[i];}
}
string s2def = "";
for(int i=0; i<s2.length(); i++)
{
if(s2[i]!=' ' || s2[i]!=')'){s2def+=s2[i];}
}
if(s1def == s2def){return true;}
else{return false;}
}
任何见解都会非常有帮助。
谢谢。