如何裁剪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查询:
上述就是C#学习教程:如何裁剪2Darrays的分段?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注---计算机技术网(www.ctvol.com)!
IEnumerable x = array3.Skip(x1) .Take(x2-x1) .SelectMany(a => a.Skip(y1).Take(y2-y1));
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/942688.html