如何裁剪2Darrays的分段?

我有一个2D数组声明为new byte[w, h] 。 我想在给定坐标(x1,y1)(x2,y2)下裁剪出该数组的子部分。 最快的方法是什么? 有没有“切片”2Darrays的方法?

你可以使用Array.Copy :

 int w2 = x2 - x1 + 1; int h2 = y2 - y1 + 1; byte[,] array2 = new byte[w2, h2]; for (int i = 0; i < w2; i++) { Array.Copy(array1, (i+x1)*h + y1, array2, i*h2, h2); } 

对于大型arrays,这可能会更快。 然而,两个嵌套循环更具可读性。

我想不出更快的方法,但你可以使用两个嵌套循环:

 byte[,] array2 = new byte[x2 - x1, y2 - y1]; for (int i = x1; i < x2; i++) { for (int j = y1; j < y2; j++) { array2[i-x1, j-y1] = array[i, j]; } } 

对于锯齿状数组,您可以使用linq查询:

 IEnumerable x = array3.Skip(x1) .Take(x2-x1) .SelectMany(a => a.Skip(y1).Take(y2-y1));