They are not alternatives. They are the only way of doing
things.
Yes, sounds logic - static arrays require a size before
compilation.
However, I tried another variation with a totally unexpected
result:
double[][] transp3(double[][] array)
{
double[][] arrayT;
double[] rowT;
// initialize rowT
foreach(i; 0..array.length)
{
rowT ~= 0;
}
foreach(col; 0..array[0].length)
{
foreach(row; 0..array.length)
{
rowT[row] = array[row][col];
}
arrayT ~= rowT;
writeln("rowT: ",rowT);
writeln("arrayT: ", arrayT);
}
return arrayT;
}
Assuming my original array to be:
array =
[
[ 4, 3, 1, 5, 2],
[19, 34, 23, 100, 59],
[62, 1, 4, 0, 76],
[23, 6, 989, 98, 1],
[ 5, 87, 45, 62, 9],
[ 5, 87, 45, 62, 9]
];
...then the printed result is unexpectedly wrong. The transposed
columns (rowT) are correct, but arrayT ~= rowT doesn't only
append rowT to arrayT. It overrides also the previous rows with
the new transposed column:
rowT: [4, 19, 62, 23, 5, 5]
arrayT: [[4, 19, 62, 23, 5, 5]]
rowT: [3, 34, 1, 6, 87, 87]
arrayT: [[3, 34, 1, 6, 87, 87], [3, 34, 1, 6, 87, 87]]
etc...
Why is that????
Thanks!