簡體   English   中英

實現IEnumerable鋸齒狀數組,該數組返回轉置項

[英]Implement IEnumerable jagged array which returns transposed item

我已經嘗試過自己做,這真是令人頭疼...

我希望能夠使用LINQ從T[key1][key2]進行Select ,實際上它在這里“看到”了T[key2][key1] (即轉置矩陣)。 我想要這樣做的原因是,我不必手動轉置數組項(這很慢),而是即時提供轉置的數組項。

不確定這是否可能!

編輯:添加此功能的示例:

T[][]T[,] .Select(item => item) ,其中itemT[]類型,是第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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM