Ok thanks! I was hoping to avoid making a copy of the arrays,
which I think std.array.join does, when treating them as a single
array range. Wishful thinking perhaps :)
On Saturday, 21 July 2012 at 20:18:25 UTC, Jonathan M Davis wrote:
On Saturday, July 21, 2012 21:47:19 Enerqi wrote:
Thanks! That does join up the arrays as I'd like.
An issue remaining is that, unlike with the chain function, I
can't sort the output of the joiner function.
Error: template instance std.algorithm.sort!("a <
b",cast(SwapStrategy)0,Result) error instantiating
Seems the return type of joiner doesn't implement random access
in the same way the return type of chain does.
Chain's documentation says "If all input ranges offer random
access and $(D
length), $(D Chain) offers them as well."
I wonder if joiner is sortable somehow?
For sort to work, it needs a random access range. Operating on
anything else
would be horribly inefficient. With the overload of joiner
which doesn't take a
seperator, it might be possible to make joiner return a random
access range if
all of the ranges passed to it were random access and had
length, but it's not
implemented that way right now, and certainly if any of the
ranges passed in
weren't random access, then that wouldn't work regardless. And
it would never
work with the separator, since the separator would be in the
range multiple
times, and sorting it could really mess it up.
The solution is to create an array and sort that. You can
either use
std.array.array on the result of joiner, or - since I believe
that you're
operating on arrays specifically - you can use std.array.join
which will just
create an array immediately rather than generating a lazy range.
- Jonathan M Daves