2010-03-31 163 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

相關問題