string manipulation performance

Steven Schveighoffer schveiguy at yahoo.com
Sun Jun 12 11:08:53 PDT 2011


On Sun, 12 Jun 2011 12:49:25 -0400, Lloyd Dupont <ld-REMOVE at galador.net>  
wrote:

> I have a method like that:
> ===
> public string repeat(string s, int num)
> {
>     string result = s;
>     for (int  i=1; i<num; i++)
>         result ~= s;
>     return result;
> }
> ===
> basically it will create num string, each a little longer...
> is there a more efficient way to go about that?
> thanks! :)
>

The runtime tries its best to avoid allocating a new string on each  
append.  Please read the manual on appending, and you also might want to  
check out an article I wrote about slices that deals with appending.  The  
runtime also provides functions to pre-allocate an array for appending.   
For example:


  public string repeat(string s, int num)
  {
      string result = s;
      result.reserve(s.length * num); // ensure result can append all the  
repeated data without reallocating
      for (int  i=1; i<num; i++)
          result ~= s;
      return result;
  }


http://www.digitalmars.com/d/2.0/arrays.html#resize

http://www.digitalmars.com/d/2.0/phobos/object.html#reserve

http://www.dsource.org/projects/dcollections/wiki/ArrayArticle

-Steve


More information about the Digitalmars-d-learn mailing list