算法优化,一段理论上可行的代码,求优化。解决方案
算法优化,一段理论上可行的代码,求优化。
------解决方案--------------------
楼上已经指出了问题所在
即使是下面简单的这2句,也是比蜗牛还慢,何况还有其它的开销:
for i:=0 to 10000 do
memo2.lines[i]:='未找到';
帮你把demo写出来,10000笔数据差不多2秒搞定,能接受的了吧;
还有其它更快的办法暂不告诉你,能适用数据更多的情况,你的问题用下面的方法就够了!!!
- Delphi(Pascal) code
begin SetLength(str,Memo2.Lines.Count,2); for I := 0 to Memo2.Lines.Count - 1 do begin str2:=SplitString(Memo2.Lines[i],#9); str[I,0]:=str2[0]; str[I,1]:=str2[1]; end; for i := 0 to Memo1.Lines.Count - 1 do begin if Memo1.Lines[i]<>'' then begin ReStr:=''; for n := low(str) to High(str) do begin if Trim(Memo1.Lines[i])=str[n,0] then begin ReStr:=Memo1.Lines[i]+#9+str[n,1]; Continue; end; end; if ReStr<>'' then begin Memo1.Lines[i]:=ReStr; end else begin Memo1.Lines[i]:=Memo1.Lines[i]+#9+'未找到数据'; end; Application.ProcessMessages; Gauge1.MinValue:=0; Gauge1.MaxValue:=Memo1.Lines.Count; Gauge1.Progress:=gauge1.Progress+1; end; end; end; 上面是本人写的,数据量小的时候还行,但是数据上万条以后,基本上就无法使用了,具体情况如下: memo1中内容 AA01 AA01 AA02 AA03 AA05 AA10 AA02 AA02 。。。。。至万条 memo2中内容 AA01 张三 AA02 王是 AA03 李而 AA04 李而 AA05 李而 AA06 李X AA07 李V AA08 李S AA09 李W AA10 李XXX AA11 李SS AA12 李WW AA13 李RR AA14 李AA AA15 李QQ AA16 李TT AA17 李YY 至。。。。几百条 比对完毕的结果 在memo1中显示为 AA01 张三 AA01 张三 AA02 王是 AA03 李而 AA05 李U AA10 李XXX AA02 王是 AA02 王是 求大侠给优化一下,另外不用数据库什么的。单纯程序内比对。谢谢
------解决方案--------------------
楼上已经指出了问题所在
即使是下面简单的这2句,也是比蜗牛还慢,何况还有其它的开销:
for i:=0 to 10000 do
memo2.lines[i]:='未找到';
帮你把demo写出来,10000笔数据差不多2秒搞定,能接受的了吧;
还有其它更快的办法暂不告诉你,能适用数据更多的情况,你的问题用下面的方法就够了!!!
- SQL code
procedure TForm1.Button1Click(Sender: TObject); const space=' ';{这里的空格根据你的Memo2中ID和Name之间空格决定,自己改合适的} var i,j:Integer; TmpStr:string; sList:TStringList; begin sList:=TStringList.Create; try for i:=0 to Memo1.Lines.Count-1 do begin TmpStr:=Memo1.Lines[i]+space; j:=pos(TmpStr, Memo2.Text); if j >0 then TmpStr:=Memo2.Lines[SendMessage(Memo2.Handle,EM_LINEFROMCHAR,j,0)] else TmpStr:=Memo1.Lines[i]+space+'未找到' ; sList.Add(TmpStr) end; Memo1.Lines.Assign(sList); finally sList.Free; end; end;