Thread overview
Regarding std.range.indexed
Jan 14, 2014
bearophile
Jan 14, 2014
Jesse Phillips
Jan 14, 2014
bearophile
January 14, 2014
Code like this doesn't compile, the swap doesn't work:


import std.range: indexed;
import std.algorithm: swap;
void main() {
    immutable source = [10, 20, 30];
    auto ind = indexed(source, [0, 1, 2]);
    swap(ind[0], ind[1]);
}


But isn't an important usage case of indexed() to shuffle and sort a view of an immutable array, like sorting a immutable(int)*[] ?

Bye,
bearophile
January 14, 2014
On Tuesday, 14 January 2014 at 01:14:41 UTC, bearophile wrote:
> Code like this doesn't compile, the swap doesn't work:
>
>
> import std.range: indexed;
> import std.algorithm: swap;
> void main() {
>     immutable source = [10, 20, 30];
>     auto ind = indexed(source, [0, 1, 2]);
>     swap(ind[0], ind[1]);
> }
>
>
> But isn't an important usage case of indexed() to shuffle and sort a view of an immutable array, like sorting a immutable(int)*[] ?
>
> Bye,
> bearophile

I thought it was to provide an index number during a foreach iteration. If you have an randomAccess range with assignable elements, why use indexed?
January 14, 2014
Jesse Phillips:

> I thought it was to provide an index number during a foreach iteration.

That's the enumerate() range, that is still missing in Phobos.


> If you have an randomAccess range with assignable elements, why use indexed?

But "source" is immutable, so its elements aren't assignable.

Bye,
bearophile