What I'm looking for is a basic operation (Which I'm sure have a name I'm just unaware of atm). I have a matrix like:
{1,2,3}
{A,N,F}
{7,8,9}
which I'd like to mutate into
{1,A,7}
{2,N,8}
{3,F,9}
(The above are only identifiers for objects not real values. The actual objects are of the same type and unordered)
I'd prefer a declarative solution to it but speed is a factor. I'm going to have to turn quite a few tables (100k cells a min) and a slow version would be on the critical path.
However I'm still more interested in a readable solution. I'm looking for alternative solutions to the below. (By alternative I do not mean variations but a different approach)
var arrays = rows.Select(row => row.ToArray());
var cellCount = arrays.First().Length;
for(var i = 0;i<cellCount;i++){
yield return GetRow(i,arrays);
}
IEnumerable<T> GetRow(int i,IEnumerable<T[]> rows){
foreach(var row in rows}{
yield return row[i];
}
}
Amongst two almost equally readable solutions I'd go for the faster but readability goes before speed
EDIT It will always be a square matrix
{7,A,1} {8,N,2} {9,F,3}
. – Kwon