我有两个多维数组声明如下:
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。:我确实考虑重构我的代码,以便完全没有这样做,并且做任何我想做的更大的数组。复制矩阵不能无痛,重点是我之前已经偶然发现了这个问题,找到了答案,但没有找到答案。
答案 0 :(得分:0)
根据我的经验,有两种方法可以有效地做到这一点:
第一种方法很丑陋,它使用了潜在的无效假设,因为不保证2D数组在内存中连续布局。第一种方法的结果是您不必更改已使用2D阵列的代码。第二种方法与第一种方法一样有效,不做无效假设,但确实需要更新代码。