比如有一个
str_arr:array of String;
str:String;setlength(str_arr,1000000);
....
....(对str_arr每一个单元赋了值)
....现在想把str_arr里的值放到str字符串里,如何放?
我用如下方法,但是太慢了.
for i:=0 to (length(str_arr)-1) do
  str:=str + str_arr[i];有没有快一点的方法。我之所以要把数组放在一个字符串里,是因为我想把str_arr的值赋给Memo,但是Memo的add方法只支持String,不支持array of String,若有把array of String放在Memo里的方法那就更好了!请大家帮忙了,谢谢!

解决方案 »

  1.   

    建议使用TStringList,既可直接与TMemo交流,也可直接引用Text属性(string类型)
      

  2.   

    var 
      i,iLen: Integer;
      str_arr: array of String; 
      str: String; 
      p: PChar;
      ...
    begin
      ...
      iLen := 0;
      for i := 0 to Length(str_arr) do
        Inc(iLen,Length(str_arr[i]);
      SetLength(str,iLen);
      p := PChar(str);
      for i := 0 to Length(str_arr) do begin
        iLen := Length(str_arr[i]);
        Move(PChar(str_arr[i])^, p^, iLen);
        Inc(p,iLen);
      end;
      ...
    end;
      

  3.   

    我一开始也是用TStringList,来替代array of String存放值,但是我有1000000个值,用TStringList的add()来存放时速度太慢了,所以TStringList就没有用。用array of String数组来存放时,速度很快的。
      

  4.   

    var
      tls: TStringList;
    begin
      tls := TStringList.Create;
      try
        //设置Capacity进行一次性内存分配
        tls.Capacity := 1000000;    tls.Add(...)
        ...  finally
        tls.Free;
      end;
    end;