Я ищу простую операцию (я уверен, что у нее есть название, о банкомате я просто не знаю). У меня есть матрица вроде:
{1,2,3}
{A, N, F}
{7,8,9}
, которую я хотел бы преобразовать в
{1, A, 7}
{2, N, 8}
{3, F, 9}
(Выше указаны только идентификаторы для объектов, а не реальные значения. Фактические объекты имеют тот же тип и неупорядоченный)
Я бы предпочел декларативное решение, но скорость имеет значение. Я ищу альтернативные решения нижеприведенным. (Под альтернативой я имею в виду не вариации, а другой подход)
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];
}
}
Среди двух почти одинаково читаемых решений я бы выбрал более быстрое, но удобочитаемость важнее скорости
РЕДАКТИРОВАТЬ Это всегда будет квадратная матрица