如何裁剪二维阵列的分段
本文关键字:二维 阵列 分段 裁剪 何裁剪 | 更新日期: 2023-09-27 18:14:46
我有一个2D数组声明为new byte[w, h]
。我想裁剪出这个数组的一个子部分给定坐标(x1,y1)
- (x2,y2)
。最快的方法是什么?是否有任何方法"切片"二维阵列?
您可以使用Array。复制:
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);
}
对于大型数组,这可能更快。然而,这两个嵌套循环的可读性更强。
我不能想出一个更快的方法,但你可以使用两个嵌套循环:
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<byte> x = array3.Skip(x1)
.Take(x2-x1)
.SelectMany(a => a.Skip(y1).Take(y2-y1));