Getting the underlying range from std.range.indexed, with elements in swapped order, when Indexed.source.length == Indexed.indices.length

Alex sascha.orlov at gmail.com
Wed Jun 27 14:50:25 UTC 2018


On Wednesday, 27 June 2018 at 14:29:33 UTC, Uknown wrote:
> On Wednesday, 27 June 2018 at 14:21:39 UTC, Alex wrote:
>> On Wednesday, 27 June 2018 at 13:27:46 UTC, Uknown wrote:
>>> Title says it all. Is there a trivial way to do this?
>>
>> There are
>> https://dlang.org/library/std/algorithm/mutation/reverse.html
>> and
>> https://dlang.org/library/std/range/retro.html
>>
>> both require a bidirectional range, which Indexed, luckily is.
>
> I wasn't clear enough. I meant getting back the underlying 
> `Source` range with _its_ elements in the order that the 
> indices specify. This wouldn't be possible in the generic case, 
> but the special case when indices.length == source.length, it 
> should be possible. So indexed(myRange, [2, 3, 5, 1, 
> 4]).sourceWithSwappedElements should return a typeof(myRange) 
> with the elements swapped in that order.

I see. Ok, one possibility is

source = indexed(source, indices).array;

but I assume you want something without extra allocation, right?


More information about the Digitalmars-d-learn mailing list