下面两段代码哪一个运行速度比较快一些,请高手指教。代码1:
procedure test1;
var
  i,j: integer;
  n: set of byte;
begin
  n := [1,2,3,4,5,6,7,8,9,0];
  for i := 0 to 10000 do
  begin
    if (i in n) then
    Inc(j);
  end;
end;
代码2:
procedure test2;
var
  i,j: integer;
  n: string;
begin
  n := '1234567890';
  for i := 0 to 10000 do
  begin
    if (Pos(IntToStr(i),n) > 0 then
    Inc(j);
  end;
end;

解决方案 »

  1.   

    不好意思,代码写错了,实际上就是问用in检测一个元素是否在一个集合中,与用Pos检测一个元素是否在String类型的变量中哪一个运行速度快?
      

  2.   

    测试方法:procedure TForm1.Button1Click(Sender: TObject);
    var
      i,j: integer;
      n: set of byte;
      K:Cardinal;
    begin
      K:=GetTickCount;
      n := [1,2,3,4,5,6,7,8,9,0];
      for i := 0 to 10000000 do
      begin
        if (i in n) then
        Inc(j);
      end;
      Edit1.Text:=IntToStr(GetTickCount-K);
    end;procedure TForm1.Button2Click(Sender: TObject);
    var
      i,j: integer;
      n: string;
      K:Cardinal;
    begin
      K:=GetTickCount;
      n := '1234567890';
      for i := 0 to 100000 do
      begin
        if Pos(IntToStr(i),n) > 0 then
        Inc(j);
      end;
      Edit2.Text:=IntToStr(GetTickCount-K);
    end;Edit1显示16, Edit2显示94
    test1循环10000000次只用16微秒
    test2循环100000次却用了94微秒
      

  3.   

    应该定义为Longint;
    var
      time1:Longint;
        begin
          time1:=GetTickCount;
           .........代码区
          time1:=Gettickcount-time1;
        end;
      

  4.   

    in操作只是在内存中CMPpos函数是取出str1,str2的字符指针,再通过字符指针的位置差+1得出str1在str2中的位置,执行周期比IN操作长很多