«Превращение» IEnumerable > 90 градусов

Я ищу простую операцию (я уверен, что у нее есть название, о банкомате я просто не знаю). У меня есть матрица вроде:

{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]; 
  }
}

Среди двух почти одинаково читаемых решений я бы выбрал более быстрое, но удобочитаемость важнее скорости

РЕДАКТИРОВАТЬ Это всегда будет квадратная матрица

8
задан Rune FS 18 February 2011 в 10:20
поделиться