【问题标题】:Efficiently shrinking a two dimensional array in C#在 C# 中有效地缩小二维数组
【发布时间】:2010-09-16 01:22:56
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

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

    编辑:

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

    【讨论】:

    • 感谢您的回复。请查看编辑后的示例。我只是想将前 10x10 个对象从 bigArray 复制到 smallArray。我只是不确定是否有比运行嵌套 for 循环更有效的方法。谢谢!
    • for 循环会做你想做的事,而不会产生很多不必要的开销。如果你所做的只是复制,那就是要走的路。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2013-01-26
        • 1970-01-01
        • 2016-02-25
        • 2019-09-23
        • 2016-03-05
        • 2015-07-13
        • 2021-06-20
        • 2013-03-26
        • 1970-01-01
        相关资源
        最近更新 更多