代码之家  ›  专栏  ›  技术社区  ›  koryakinp

将部分三维阵列复制到二维阵列

  •  0
  • koryakinp  · 技术社区  · 7 年前

    假设我有一个多维数组:

    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 }
        },
    };
    

    我想从索引开始复制数组的3乘3部分 [1,1,1] 直到索引 [1,3,3] (全部2个值)。

    最有效的方法是什么?到目前为止,我是用一个循环来完成的:

    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 回复  |  直到 7 年前
        1
  •  1
  •   Jared Merritt    7 年前

    poke 他们已经在评论中提出了同样的观点,但这基本上是最好的方法。

    这是最有效的方法。您使用的是快速循环,并且只循环那些您感兴趣的索引。-

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