在C#中,将二维数组缩小到更小大小的有效方法是什么?
例如:
var bigArray = new object[100, 100];
var smallArray = new object[10, 10];
bigArray[0, 0] = 1;
bigArray[0, 1] = 2;
...
bigArray[99, 99] = 100000;
startRowIndex = 0;
startColumnIndex = 0;
endRowIndex = 9;
endColumnIndex = 9;
smallArray = bigArray.SomeShirnkingMethod(startRowIndex, startColumnIndex, endRowIndex, endColumnIndex);
你将如何编写SomeShrinkingMethod()?
谢谢!
编辑:我只是想把bigArray的前10行和列放到smallArray中,但我不确定在数组中循环是否是最有效的方法。
您必须创建一个所需大小的新数组(在您的代码中,您已经这样做了)并复制内容。我不确定在你的情况下"收缩"手术需要做什么。但是,不能修改现有数组的维度。
你提出的函数是有缺陷的,因为它不知道目标阵列的尺寸。要么传递维度并在内部对新数组进行标注,要么传递目标数组并简单地复制内容。
编辑:
作为对您编辑的回应:是的,循环将是实现这一点的合理方式,而且速度也相当快。我不知道.NET中有一种可以应用于多维数组的块复制机制。
这取决于你想让收缩函数做什么。你必须制作一个新的数组,并根据你的标准进行复制。我的假设是,你有一个2d数组是有原因的,对吧?副本可以是琐碎的(找到下一个具有非零值的位置并将其放在目标中的下一个可用位置),也可以基于其他内容。你能提供更多信息吗?
是的,最好的方法几乎肯定是在每个单元格上循环,尽管可能复制每个"行"的序列。该方法需要知道要从源正方形复制的正方形的较低索引和大小(这可能隐含在目标正方形定义中)。