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

Reply via email to