将一个不规则数组复制到另一个数组的顶部

3

我该如何将一个不规则数组复制到另一个数组中?例如,我有一个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
你的数组总是矩形的吗?如果是,为什么不使用矩形数组而不是交错数组? - Mark Byers
一个观察 - 示例数组都是矩形的。 - James Kolpack
2个回答

2

由于您的示例具有二维特性,因此使用二维数组似乎更为合适,而不是使用交错数组。但无论哪种方式,您都可以采用传统的循环方式来完成。类似以下代码(未经测试):

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

通过您的编辑,您的解决方案也适用于非矩形数组。 :) - Mark Byers

2

即使您的输入不是矩形,这也应该能够正常工作:

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

好的编辑。我正要把secondArray[i].CopyTo(firstArray[startingRow + i], startingColumn);添加到我的内循环中。你比我快! - Anthony Pegram
@Anthony:实际上,CopyTo 在这里非常好 - 你应该做出这个改变。 - Mark Byers

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接