2013-04-17 22 views
0

對於我正在處理的項目,我有兩個由2D數組組成的網格,其中一個允許用戶在其中繪製圖像,另一個顯示最後一個圖像。然而,我的代碼是製作一個淺的副本而不是深層副本,我需要找到一種在Processing中深度複製的方法。這裏是我的淺拷貝代碼片段:處理中兩個2D數組之間的深層複製

for (int i = 0; i < cols; i++) { 
    for (int j = 0; j < rows; j++) { 
    mainGrid[i][j] = userGrid[i][j]; 
    } 
    } 

在處理中這樣做的最簡單方法是什麼?我一直在廣泛搜索最簡單的方法,以便將我的userGrid的所有內容深入複製到mainGrid中,例如使用Java Deep-Copy庫,但我不太清楚如何使用此庫的工具將2D數組複製到另一個。

回答

0

最簡單的選項我看到使用arrayCopy()這是靈活的,併爲此設計。 這裏有一個快速演示:

int nx = 5; 
int ny = 5; 
int[][] mainGrid; 
int[][] userGrid; 

void setup(){ 
    //init 
    mainGrid = new int[nx][ny]; 
    userGrid = new int[nx][ny]; 
    //populate with dummy data to test 
    for(int y = 0 ; y < ny; y++){ 
    for(int x = 0; x < nx; x++){ 
     userGrid[x][y] = round(random(nx)+random(ny)); 
    } 
    } 

    println("userGrid:\n"+print2DArray(userGrid,nx,ny,true)); 

    arrayCopy(userGrid,mainGrid);//copy userGrid into mainGrid 

    println("mainGrid:\n"+print2DArray(mainGrid,nx,ny,true)); 
} 
//utility to pretty print 2D arrays 
String print2DArray(int[][] arr,int sx,int sy,boolean printIds){ 
    String out = ""; 
    for(int i = 0 ; i < sx*sy; i++){ 
    int x = i/sx; 
    int y = i%sx; 
    boolean isLastOnLine = i%sx == sx-1; 
    out += (printIds ? "["+x+"]"+"["+y+"]:" : "")+arr[x][y]+(isLastOnLine ? "":","); 
    if(isLastOnLine) out += "\n"; 
    } 
    return out; 
} 
+0

我不相信'arrayCopy()''創建一個深層副本。從[docs](http://www.processing.org/reference/arrayCopy_.html): 「此函數只複製引用,這意味着對於大多數目的它只複製一維數組(一組括號)如果與兩個(或三個或更多)維數組一起使用,它將只複製第一級的引用,因爲二維數組只是一個「數組數組」。 –