On Sunday, 24 May 2020 at 11:21:00 UTC, 9il wrote:
On Saturday, 23 May 2020 at 18:15:32 UTC, Pavel Shkadzko wrote:
[...]

If the common nd-array isn't jugged (a parallelotop), you can use fuse function.

----------
/+dub.sdl:
dependency "mir-algorithm" version="~>3.8.12"
+/
import std.stdio: writeln;
import mir.ndslice;

void main() {
    auto arr =
    [[[0, 1, 2, 3, 4],
      [5, 6, 7, 8, 9]],
     [[10, 11, 12, 13, 14],
      [15, 16, 17, 18, 19]],
     [[20, 21, 22, 23, 24],
      [25, 26, 27, 28, 29]]];
    auto flatten = arr.fuse.field;

    static assert(is(typeof(flatten) == int[]));
        assert(flatten == 30.iota);
}
----------

It performs exactly one allocation.

Yep, I know about Mir fuse. I was more wondering about the absence of flatten in Phobos. But on dlang forum some people claimed that when it comes to anything multidimensional, use Mir.

Reply via email to