[英]Implement IEnumerable jagged array which returns transposed item
我已經嘗試過自己做,這真是令人頭疼...
我希望能夠使用LINQ從T[key1][key2]
進行Select
,實際上它在這里“看到”了T[key2][key1]
(即轉置矩陣)。 我想要這樣做的原因是,我不必手動轉置數組項(這很慢),而是即時提供轉置的數組項。
不確定這是否可能!
編輯:添加此功能的示例:
T[][]
或T[,]
.Select(item => item)
,其中item
為T[]
類型,是第N個枚舉數位置的集合。
int[,] matrix = new int[2,2] {{1, 2}, {3, 4}};
matrix = matrix.Select(item => item); //Where .Select magically transposes
//Matrix is now {{1, 3}, {2, 4}}
要編寫代碼以轉置順序遍歷數組,您只需編寫代碼以正常遍歷數組即可; 數組實現IEnumerable
使用的是什么,而不是遍歷外部循環中的最低維度和內部循環中的較高維度,您只需將它們反轉即可:
public static IEnumerable<T> TraverseTransposed<T>(this T[,] array)
{
for (int j = 0; j < array.GetLength(1); j++)
for (int i = 0; i < array.GetLength(0); i++)
yield return array[i, j];
}
這是您的意思嗎(慢嗎?):
var items = new int[,] {
{1,2,3,4,5,6},
{10,20,30,40,50,60},
{100,200,300,400,500,600},
};
var transposed = new int[items.GetLength(1), items.GetLength(0)];
for (int row = 0; row < items.GetLength(0); row++)
{
for (int col = 0; col < items.GetLength(1); col++)
{
transposed[col,row] = items[row,col];
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.