将多维数组的一部分复制为较小的数组

时间:2011-03-29 13:37:58

标签: c# .net arrays performance multidimensional-array

我有两个多维数组声明如下:

bool?[,] biggie = new bool?[500, 500];
bool?[,] small = new bool?[100, 100];

我想将biggie的一部分复制到小部分中。假设我希望水平索引100到199,垂直100到199。

我写了一个简单的for语句,如下所示:

for(int x = 0; x < 100; x++)
{
    For(int y = 0; y < 100; y++)
    {
        Small[x,y] = biggie[x+100,y+100];
    }
}

我在我的代码中做了很多,这已被证明是一个主要的性能干扰器。

Array.Copy只复制单维数组,并且对于多维数组,它只考虑整个矩阵是一个单独的数组,将每一行放在另一行的末尾,这样我就无法切割我阵列中间的一个正方形。

有更有效的方法吗?

Ps。:我确实考虑重构我的代码,以便完全没有这样做,并且做任何我想做的更大的数组。复制矩阵不能无痛,重点是我之前已经偶然发现了这个问题,找到了答案,但没有找到答案。

1 个答案:

答案 0 :(得分:0)

根据我的经验,有两种方法可以有效地做到这一点:

  • 使用不安全的代码并直接使用指针。
  • 将2D数组转换为1D数组,并在需要将其作为2D数组访问时执行必要的算术运算。

第一种方法很丑陋,它使用了潜在的无效假设,因为不保证2D数组在内存中连续布局。第一种方法的结果是您不必更改已使用2D阵列的代码。第二种方法与第一种方法一样有效,不做无效假设,但确实需要更新代码。