On Monday, 9 May 2016 at 18:50:32 UTC, Jay Norwood wrote:
I noticed some discussion of Cartesian indexes in Julia, where
the index is a tuple, along with some discussion of optimizing
the index created for cache efficiency. I could find
foreach(ref val, m.byElement()), but didn't find an example
that returned a tuple index. Is that supported?
http://julialang.org/blog/2016/02/iteration
http://julialang.org/blog/2016/03/arrays-iteration
I guess you are talking about ndslice
(http://dlang.org/phobos/std_experimental_ndslice).
There are various functions that can take static arrays, as well
as tuples as parameters that are both cache-efficient. For
example:
http://dlang.org/phobos-prerelease/std_experimental_ndslice_slice.html#.makeSlice
and
http://dlang.org/phobos-prerelease/std_experimental_ndslice_slice.html#.Slice.opIndex
I also found the need for a byElement function that also provides
the index. I guess it is a good idea for a pull request.
In the mean time, you can use the following:
auto indexed_range = lockstep(
ndslice.byElement,
ndslice.shape.indexSlice
);
foreach (ref elem; indexes; indexed_range)
writefln("Element at %s = %s", indexes, elem);