Wanted: Review manager for std.experimental.range.ndslice

Ilya Yaroshenko via Digitalmars-d digitalmars-d at puremagic.com
Mon Nov 16 11:17:16 PST 2015


On Monday, 16 November 2015 at 09:56:57 UTC, Andrea Fontana wrote:
> On Monday, 16 November 2015 at 03:05:03 UTC, Ilya Yaroshenko 
> wrote:
>> Hello,
>> Review manager for N-dimensional ranges is wanted
>>
>> Docs (see PR for latest version): 
>> http://dtest.thecybershadow.net/artifact/website-7a646fdea76569e009844cdee5c93edab10980ca-cdcb694c40ec47acf88b0aa878e1623e/web/phobos-prerelease/std_experimental_range_ndslice.html
>>
>> PR: https://github.com/D-Programming-Language/phobos/pull/3397
>>
>> DUB: http://code.dlang.org/packages/dip80-ndslice
>>
>> Best Regards,
>> Ilya
>
> Nice work!
> If I have a matrix like
>
> 1 2
> 3 4
>
> iota(4).sliced(2,2);
>
> Is there a way to transform it to:
>
> 1 1 1 2 2 2
> 1 1 1 2 2 2
> 1 1 1 2 2 2
> 3 3 3 4 4 4
> 3 3 3 4 4 4
> 3 3 3 4 4 4
>
> or
>
> 0 0 0 0 0 0
> 0 1 0 0 2 0
> 0 0 0 0 0 0
> 0 0 0 0 0 0
> 0 3 0 0 4 0
> 0 0 0 0 0 0
>
> ?
>
> Of course the inverse operation seems quite easier to do using 
> slices.

```
import std.algorithm, std.range, std.stdio;
auto m = iota(1, 5).sliced(2, 2);
"%(%(%s %)\n%)\n".writefln(m);

auto w = createSlice!int(6, 6);

w[1..$, 1..$].strided!0(3).strided!1(3)[] = m;
"%(%(%s %)\n%)\n".writefln(w);

foreach(i; 0..3)
     foreach(j; 0..3)
         w[i..$, j..$].strided!0(3).strided!1(3)[] = m;
"%(%(%s %)\n%)\n".writefln(w);
```

Prints:

1 2
3 4

0 0 0 0 0 0
0 1 0 0 2 0
0 0 0 0 0 0
0 0 0 0 0 0
0 3 0 0 4 0
0 0 0 0 0 0

1 1 1 2 2 2
1 1 1 2 2 2
1 1 1 2 2 2
3 3 3 4 4 4
3 3 3 4 4 4
3 3 3 4 4 4

--Ilya



More information about the Digitalmars-d mailing list