If I have a List<List<T>
like the following :
Name City Id
Anna NY 1
Joe NJ 2
How can I transpose it efficiently in order to have :
Name Anna Joe
City NY NJ
Id 1 2
I tried the following
public static void MatrixTranspose<T>(ref List<List<T>> matrix)
{
var h = matrix.Count - 2;
var w = matrix[0].Count - 1;
for (var i = 0; i < h; ++i)
{
for (var j = i + 1; j < w; ++j)
{
var tmp = matrix[i][j];
matrix[i][j] = matrix[j][i];
matrix[j][i] = tmp;
}
}
}
That seems to be working on paper I believe? But I feel like I'm doing too much permutations. Is there a way to optimize it? Also, is the use of ref correct here?
string[,]
or evenstring[][]
. Or you may let it beList<List<string>>
but avoid to transpose the matrix. If it's only for visualization/serialization purposes then you just need to read values in the other order. Even better...create aView
of underlying type and keep consumers unaware of its implementation/storage. Just few ideas to consider. \$\endgroup\$