On Sunday, 14 December 2014 at 23:16:12 UTC, Nordlöw wrote:
What's the fastest way to append multiple elements to an array?:
Either
arr ~= e1;
arr ~= e2;
arr ~= e3;
or
arr ~= [e1,e2,e3];
or some other trick?
It does somewhat depend on context but std.array.appender is
generally a good choice. It supports appending elements
individually, appending a range of elements and manually
reserving extra space.
E.g.
auto app = appender(somePreExistingArray);
app ~= e0;
app ~= [e1, e2];
app.reserve(3); //eagerly ensures that there's 3 elements
capacity,
//guaranteeing at most one re-allocation for adding the following
3 elements
app ~= e3;
app ~= e4;
app ~= e5;
or my personal favourite:
app ~= only(e6, e7, e8, e9);
When you append a range to an appender it will use the length of
the range (if available) to reserve space ahead-of-time.
There is a (small) cost to creating an appender, so you ideally
don't want to make a new one every time you add a couple of
elements (this isn't a deficiency in appender, it's just how GC
slices are in D).