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