将3维数组的一部分复制到2维数组

时间:2018-08-06 22:42:23

标签: c# arrays multidimensional-array copy

假设我有一个多维数组:

var arr = new double[2, 5, 5]
{
    {
        { 1, 1, 1, 1, 1 },
        { 1, 1, 1, 1, 1 },
        { 1, 1, 1, 1, 1 },
        { 1, 1, 1, 1, 1 },
        { 1, 1, 1, 1, 1 }
    },
    {
        { 1, 1, 1, 1, 1 },
        { 1, 2, 2, 2, 1 },
        { 1, 2, 2, 2, 1 },
        { 1, 2, 2, 2, 1 },
        { 1, 1, 1, 1, 1 }
    },
};

我要从索引 [1,1,1] 到索引 [1,3,3] (全部为2)复制该数组的3乘3部分值)。

最有效的方法是什么?到目前为止,我已经循环执行了:

var arr2 = new int[3, 3];

int x_start = 1;
int y_start = 1;

for (int i = 0; i < arr2.GetLength(0); i++)
{
    for (int j = 0; j < arr2.GetLength(1); j++)
    {
        arr2[i, j] = arr[1, x_start + i, y_start + j];
    }
}

但是我想知道是否有更有效的方法?

1 个答案:

答案 0 :(得分:1)

poke在他们的评论中已经指出了相同的观点,但这实质上是做到这一点的最佳方法。

  

这是最有效的方法。您正在使用快速循环,而仅循环您感兴趣的那些索引。-poke

您可能可以将两个GetLength()调用缓存为一个整数,但是我怀疑这会对性能产生任何有意义的影响。

相关问题