我在找的是一個基本的操作(我確信有一個名字,我只是不知道atm)。我有這樣的矩陣:「轉動」一個IEnumerable <IEnumerable <T>> 90度
{1,2,3}
{A,N,F}
{7,8,9}
我想變異成
{1,A,7}
{2,N,8}
{3,F,9}
(以上只是對象不是真實值的標識符。實際的物體是相同類型和無序的)
我更喜歡聲明性的解決方案,但速度是一個因素。我將不得不打開幾個表格(每分鐘10萬個單元),而慢速版本將處於關鍵路徑上。
但是我對可讀解決方案更感興趣。 我正在尋找下面的替代解決方案。 (通過替代我不是指的變化,但不同的方法)
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];
}
}
當中兩個幾乎同樣可讀解決方案,我會去的快,但速度之前可讀性去
編輯 這將永遠是一個方形矩陣
它被稱爲轉置(http://en.wikipedia.org/wiki/Transpose) – Frank 2011-02-18 09:35:22
我不認爲它可以得到比這更可讀! – logicnp 2011-02-18 09:39:48
它僅適用於方形矩陣,還適用於非方形? – 2011-02-18 09:42:26