On Saturday, 20 February 2016 at 02:26:56 UTC, maik klein wrote:
On Saturday, 20 February 2016 at 02:22:12 UTC, Ali Çehreli
wrote:
On 02/19/2016 06:00 PM, maik klein wrote:
How would I transpose
float[3][2]
to
float[2][3]
with http://dlang.org/phobos/std_range.html#.transposed
Because static arrays are not ranges, they must be used as
slices with the help of []. The following code does the same
thing in two different ways:
import std.stdio;
import std.range;
import std.algorithm;
void main() {
float[3][2] arr = [ [1, 2, 3],
[4, 5, 6] ];
// Method A
{
float[][] arr2;
foreach (ref a; arr) {
arr2 ~= a[];
}
writeln(arr2.transposed);
}
// Method B
{
auto r = arr[].map!((ref a) => a[]).array.transposed;
writeln(r);
}
}
Ali
Your "Method B" is how I did it too but how do I convert it
back to a static array of float[2][3]?
I don't see the point of using transposed which gives a range out
if you want to put it back into a float[2][3] right away, just do
a double foreach:
void main(string[] args) {
float[3][2] src = [[1, 2, 3], [2, 3, 4]];
float[2][3] dst;
foreach (i ; 0..src.length)
foreach (j ; 0..src[0].length)
dst[j][i] = src[i][j];
assert(dst == [[1, 2], [2, 3], [3, 4]]);
}