On 2011-06-12 11:08, Steven Schveighoffer wrote: > On Sun, 12 Jun 2011 12:49:25 -0400, Lloyd Dupont <ld-rem...@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
Also, std.string.repeat has been scheduled for deprecation. You should use std.array.replicate instead. It does the same thing but for all arrays instead of just strings. - Jonathan M Davis