2

在 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 行和前 10 列放入 smallArray,但我不确定循环遍历数组是否是最有效的方法。

4

3 回答 3

4

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

您提出的功能有缺陷,因为它无法知道目标数组的尺寸。要么在内部传递维度和维度新数组,要么将目标数组传递给它并简单地复制内容。

编辑:

回应您的编辑:是的,循环将是执行此操作的合理方式,而且速度也相当快。我不知道 .NET 中可以应用于多维数组的块复制机制。

于 2008-10-08T15:57:53.150 回答
1

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

于 2008-10-08T16:05:22.480 回答
0

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

于 2011-01-10T14:08:20.827 回答