在C#中有效缩小二维数组

时间:2008-10-08 15:51:08

标签: c# .net arrays data-structures multidimensional-array

在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中,但我不确定循环通过数组是否是最有效的方法。

3 个答案:

答案 0 :(得分:4)

你必须创建一个所需大小的新数组(在你的代码中,你已经完成了这个)并复制内容。我不确定在你的情况下需要做什么“缩小”操作。但是,您无法修改现有阵列的尺寸。

您提出的功能有缺陷,因为它无法知道目标阵列的尺寸。您可以在内部传递尺寸和尺寸,也可以将目标数组传递给目标数组,然后复制内容。

编辑:

响应您的编辑:是的,循环将是合理的方法,这也是相当快。我不知道.NET中可以应用于多维数组的块复制机制。

答案 1 :(得分:1)

取决于您希望缩小功能的功能。你必须制作一个新阵列并根据你的标准进行复制。我的假设是你有一个二维阵列是有原因的,对吧?副本可以是琐事(找到具有非零值的下一个位置并将其放在目标中的下一个可用位置)或基于其他内容。你能提供更多信息吗?

答案 2 :(得分:0)

是的,最好的方法几乎肯定是循环遍历每个单元格,尽管可以复制每个“行”的序列。该方法需要知道要从源方块复制的方形的较低索引和大小(可能隐含在目标方形定义中)。