On Sunday, 26 July 2020 at 14:56:35 UTC, Steven Schveighoffer
wrote:
A map that returns an lvalue would be sortable, but you would
be sorting the processed elements, and probably not the
original elements.
Indeed, but that's what I want: sort the process elements.
Otherwise, I'd place sort before the transformations.
I have found this handy tool quite useful in my code where I
need a temporary array:
// creates a concrete range (std.container.array.Array range)
out of the
// original range that is eagerly fetched, and then can be
processed, without
// allocating extra garbage on the heap.
auto concreteRange(Range)(Range r)
{
import std.range : ElementType;
import std.container.array : Array;
return Array!(ElementType!Range)(r)[];
}
Slicing an Array will keep the reference count correctly, and
destroy the memory automatically after you're done using it. So
it's perfect for temporary arrays in pipelining.
-Steve
This works well, and it's rather nifty. Still, I'm confused
since, as far as I know, map wraps its source, i.e. the array in
this case, which is sortable. It seems to me the only reason I
can't sort MapResult is because it doesn't have the proper
interface.
I'm obviously missing something.