对于一个例子,如果我想迭代从数组元素test
和perfrorm操作,但它们具有以特定的方式进行格式化。C#正确的方式遍历2D阵列作为子集的2D阵列
基本上我用一个二维数组试图遍历一个二维数组。
double[,] test = {
{9, 8, 7, 6, 5, 4, 3, 2},
{8, 7, 6, 5, 4, 3, 2, 1},
{7, 6, 5, 4, 3, 2, 1, 0},
{6, 5, 4, 3, 2, 1, 0, 0},
{5, 4, 3, 2, 1, 0, 0, 0},
{4, 3, 2, 1, 0, 0, 0, 0},
{3, 2, 1, 0, 0, 0, 0, 0},
{2, 1, 0, 0, 0, 0, 0, 0},
};
double[,] subset = new double[2,2]; //used in math
我想什么能够做的就是在每次迭代遍历任何规模大小矩阵(假设他们甚至大小和方)看起来像这样:
Iteration 1:
subset[0,0] = test[0,0];
subset[0,1] = test[0,1];
subset[1,0] = test[1,0];
subset[1,1] = test[1,1];
所以基本上从大矩阵中选择与子集大小相同的正方形。
Iteration 2:
subset[0,2] = test[0,2];
subset[1,2] = test[1,2];
subset[0,3] = test[0,3];
subset[1,3] = test[1,3];
可以编写利用'收率return'(https://msdn.microsoft.com/en-us/library/9k7k7cf0.aspx)的扩展方法。基本上,扩展方法将迭代数组,并在每次迭代时在数组的子集上调用“yield return”。使用此功能,您可以自定义该子集中包含多大和哪些索引。有了这个说法,你可以使扩展方法更进一步,通过使用偏移量来跳过已经返回“yield return”的数组块,使每个“迭代”变得更加智能。 – Tom
谢谢,我会去阅读它。 –
如果我理解正确,你想在2x2(或者通常是'''''''m')子矩阵的“块”中迭代你的矩阵。如果父矩阵在任一方向上的大小不是所请求的子矩阵的维数的倍数,会发生什么?在你的例子中,你试图将一个8x8矩阵分块为2×2的子矩阵,但如果它是9x9,会发生什么? –