On Fri, 15 Nov 2013 23:26:19 +0100, Jacek Furmankiewicz wrote: > Since D strings are immutable (like in most other languages), string > concatenation is usually pretty inefficient due to the need to create a > new copy of the string every time. > > I presume string concatenation using the typical array syntax can be > optimized by the compiler to do all of this in one shot, e..g > > string newString = string1 ~ string2 ~ string3; > > but what happens if I need to concatenante a large string in a loop? > > I tried looking through Phobos for a StringBuilder class (since that is > the common solution in Java and C#), but did not find anything similar. > > What is the D way of doing efficient string concatenation (especially if > it spans multiple statements, e.g. while in a loop)?
std.array has an Appender type that can be used to build up a string (or any other array type) efficiently. E.g.: auto strBuilder = appender!string; while (...) { str.put("foo"); } // Get the array out: string str = strBuilder.data;