How to catenate a string multiple times ?

John Colvin john.loughran.colvin at gmail.com
Sat Mar 16 09:00:13 PDT 2013


On Saturday, 16 March 2013 at 15:58:32 UTC, John Colvin wrote:
> On Saturday, 16 March 2013 at 15:29:03 UTC, Peter Sommerfeld 
> wrote:
>> Cannot find a reference: What is the best way
>> to catenate a string multiple times ?
>> Unfortunately this this does not work ;-)
>>
>> string tab = "..";
>> tab = tab * 4; // -> "........"
>>
>> Peter
>
> There are very many different ways of doing this, here are a 
> few.
>
> using template recursion:
>
> //Repeats string "s" size_t "num" times at compile-time
> template RepeatString (string s, size_t num)
> {
>     static if(num == 0)
>         const RepeatString = "";
>     else
>         const RepeatString = s ~ RepeatString!(s, num-1);
> }
>
>
> or for fast runtime performance (also works at compile-time), 
> something like this:
>
> //appends any array to itself multiple times.
> T[] concat(T)(T[] arr, size_t num_times)
> {
>     auto app = appender!(T[])(arr);
>     app.reserve(num_times);
>
>     foreach(i; 0..num_times)
>         app ~= arr;
>
>     return app.data;
> }
>
>
> simpler but slower:
>
> T[] concat_slow(T)(T[] arr, size_t num_times)
> {
>     auto result = arr;
>     foreach(i; 0..num_times)
>         result ~= arr;
>     return result;
> }
>
>
> If you needed extreme performance there are faster ways, but 
> they are much longer and more complex.

or, as bearophile points out, use std.array.replicate

I should really read over phobos again, I keep forgetting 
functions exist...


More information about the Digitalmars-d-learn mailing list