繁体   English   中英

处理中两个2D阵列之间的深层复制

[英]Deep copy between two 2D Arrays in Processing

对于我正在从事的项目,我有两个由2D阵列形成的网格,其中一个允许用户在其中绘制图像,另一个则显示最后提交的图像。 但是,我的代码正在对其进行浅拷贝而不是深拷贝,并且我需要在Processing中找到一种深拷贝的方法。 这是我的浅层复制代码的片段:

   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阵列复制到另一个阵列中。

我看到的最简单的选择是使用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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM