代码之家  ›  专栏  ›  技术社区  ›  George Johnston

将一个锯齿数组复制到另一个锯齿数组上

  •  3
  • George Johnston  · 技术社区  · 16 年前

    如何将一个锯齿状阵列复制到另一个阵列?例如,我有一个5x7数组:

    0, 0, 0, 0, 0, 0, 0
    0, 0, 0, 0, 0, 0, 0
    0, 0, 0, 0, 0, 0, 0
    0, 0, 0, 0, 0, 0, 0
    0, 0, 0, 0, 0, 0, 0
    

    以及4x3阵列:

    0,1,1,0
    1,1,1,1
    0,1,1,0
    

    我希望能够在我的全零数组上指定一个特定的起点,如(1,1),并将我的第二个数组复制到它的顶部,以便得到如下结果:

    0, 0, 0, 0, 0, 0, 0
    0, 0, 1, 1, 0, 0, 0
    0, 1, 1, 1, 1, 0, 0
    0, 0, 1, 1, 0, 0, 0
    0, 0, 0, 0, 0, 0, 0
    

    最好的办法是什么?

    2 回复  |  直到 16 年前
        1
  •  2
  •   Anthony Pegram    16 年前

    由于示例的平方特性,这似乎更适合二维数组,而不是锯齿形数组。但不管怎样,你肯定可以用老式的方法来做,然后在上面循环。类似于(未经测试的)

    for (int i = 0; i < secondArray.Length; i++)
    {
        for (int j = 0; j < secondArray[0].Length; j++)
        {
            firstArray[startingRow + i][startingColumn + j] = secondArray[i][j];
        }
    }
    

    编辑: 和马克一样,我也有一点进步,略有不同,但大致相同。

    for (int i = 0; i < secondArray.Length; i++)
    {
        secondArray[i].CopyTo(firstArray[startingRow + i], startingColumn);
    }
    
        2
  •  2
  •   Mark Byers    16 年前

    即使您的输入不是矩形的,也应该这样:

    void copy(int[][] source, int[][] destination, int startRow, int startCol)
    {
        for (int i = 0; i < source.Length; ++i)
        {
            int[] row = source[i];
            Array.Copy(row, 0, destination[i + startRow], startCol, row.Length);
        }
    }