【问题标题】:Copy one jagged array ontop of another将一个锯齿状数组复制到另一个上
【发布时间】:2011-02-02 17:44:49
【问题描述】:

我怎样才能完成将一个锯齿状数组复制到另一个?例如,我有一个 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

最好的方法是什么?

【问题讨论】:

  • 您的阵列总是矩形的吗?如果是这样,为什么不使用矩形阵列而不是锯齿阵列?
  • 观察 - 示例数组都是矩形的。

标签: c# jagged-arrays


【解决方案1】:

由于您的示例的平方性质,这似乎更适合二维数组而不是锯齿状。但无论哪种方式,你当然可以用老式的方式来做它并循环它。类似(未经测试)

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

【讨论】:

  • +1:通过您的编辑,您的解决方案也适用于非矩形阵列。 :)
【解决方案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:实际上 CopyTo 在这里非常好 - 你应该做出改变。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-23
  • 2015-01-03
  • 2019-06-17
  • 1970-01-01
相关资源
最近更新 更多