当处理大量的字符数据时,如果是超大规模的运算,尽量先转换成整型数据,数据字符尽量^48,直接转成整型,//尽量要避免字符串的比对,那是非常慢的过程,切记切记
可以从4到5分钟的处理,优化到不到1S。
如下:
String BWdata;
String SWdata;
String GWdata;
typedef int Gkind[30];
Gkind *GSHdata=new Gkind[m_lvDataVector.size()]; //申请一个超大空间进行空间换时间
memset(GSHdata,0,sizeof(int)*30*m_lvDataVector.size());
for(int i=0;i<m_lvDataVector.size();++i)
{
String Dtxt =m_lvDataVector[i]->SubItems1.Trim();
int Bsg=0;
for(int Di=1;Di <=Dtxt.Length();++Di)
{
if(Dtxt.SubString(Di,1)=="*")
++Bsg;
else
{
int t=Dtxt[Di]^48;
if(Bsg==0)
{
++GSHdata[i][t];
}
else if(Bsg==1)
{
//int t=Dtxt[Di]^48;
++GSHdata[i][10+t];
}
else if(Bsg==2)
{
++GSHdata[i][20+t];
}
}
}
}
//尽量要避免字符串的比对,那是非常慢的过程,切记切记
//过滤处理
for(int i=0;i<FZOnum;++i) //划分几组
{
//memset(FZgl,0,sizeof(int)*1000);
for(int j=0;j<FZone;++j)
{
//单文件内处理---------------------
int GLnum=0;
for(int Gi =0;Gi<1000;++Gi)
{
// int MZ=0;
// if(!(Btxt.Pos(Gi/100) || Btxt.Pos(Gi/10%10) || Btxt.Pos(Gi%10))) //
// MZ++;
// if(!(Stxt.Pos(Gi/100) || Stxt.Pos(Gi/10%10) || Stxt.Pos(Gi%10))) //
// MZ++;
// if(!(Gtxt.Pos(Gi/100) || Gtxt.Pos(Gi/10%10) || Gtxt.Pos(Gi%10))) //
// MZ++;
// int MZ=0;
// if(!Fload->Strings[0].Pos(String(Gi/100)) &&
// !Fload->Strings[0].Pos(String(Gi/10%10)) &&
// !Fload->Strings[0].Pos(String(Gi%10)) )
// MZ++;
// if(!Fload->Strings[1].Pos(String(Gi/100)) &&
// !Fload->Strings[1].Pos(String(Gi/10%10)) &&
// !Fload->Strings[1].Pos(String(Gi%10)) )
// MZ++;
// if(!Fload->Strings[2].Pos(String(Gi/100)) &&
// !Fload->Strings[2].Pos(String(Gi/10%10)) &&
// !Fload->Strings[2].Pos(String(Gi%10)) )
// MZ++;
// //断组命中判断
int MZ= GSHdata[i*FZone+j][Gi/100]+GSHdata[i*FZone+j][10+Gi/10%10]+
GSHdata[i*FZone+j][20+Gi%10];
if(DZint[MZ])
{
FZdata[i][Gi] ++; //不中断组就错误1
GLnum++;
}
}
m_lvDataVector[i*FZone+j]->DDnum = String(GLnum);
//文件夹内部容错
}