2010-03-31 104 views
3

如何完成将一个锯齿状阵列复制到另一个阵列?举例来说,我有一个5×7阵列:在将另一个锯齿状阵列复制到另一个

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

我希望能够指定一个特定的起点,如(1,1):

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的阵列我所有的零阵列,并复制我的第二个阵列ontop它,所以我会得到如下结果:

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

是你的数组总是矩形?如果是这样,为什么不使用矩形数组而不是锯齿形数组? – 2010-03-31 01:31:06

+0

观察 - 示例数组都是矩形的。 – 2010-03-31 01:36:00

回答

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

+1:通过编辑,您的解决方案也适用于非矩形阵列。 :) – 2010-03-31 01:53:36

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

很好的编辑。我正要添加'secondArray [i] .CopyTo(firstArray [startingRow + i],startsColumn);'而不是我的内部循环。你打败了我! – 2010-03-31 01:48:38

+0

@Anthony:其实CopyTo在这里非常好 - 你应该做出改变。 – 2010-03-31 01:51:45

相关问题