Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中优雅地复制多维数组?_Java_Arrays_Clone - Fatal编程技术网

如何在Java中优雅地复制多维数组?

如何在Java中优雅地复制多维数组?,java,arrays,clone,Java,Arrays,Clone,在发现clone()无法像多维数组那样正常工作的困难之后,现在我写 for(int k = 0; k < Nz; k++){ for(int j = 0; j < Ny; j++){ for(int i = 0; i < Nx; i++){ grid_copy[i][j][k] = grid[i][j][k]; } } } for(int k=0;k

在发现clone()无法像多维数组那样正常工作的困难之后,现在我写

for(int k = 0; k < Nz; k++){
    for(int j = 0; j < Ny; j++){
        for(int i = 0; i < Nx; i++){
            grid_copy[i][j][k] = grid[i][j][k];
        }
    }
}           
for(int k=0;k

对于每个数组。这感觉是如此令人沮丧的低水平和抗干燥。有谁能建议一种更通用的方法吗?

我不知道有什么更通用的方法。我只需要定义一个函数就可以了

  public void copyMultidimensionalArray(int[][][] destination,int[][][] source)
    {
        // your above code here   
    }
然后每次我都会调用这个函数

 copyMultidimensionalArray(grid_copy,grid);
再优雅不过了,对吧


请注意,上面的示例仅使用整数数组。当然,您可以使用Object类型的数组使其更通用

这说明了如何使用
arraycopy
方法将数据从一个数组高效地复制到另一个数组中。我认为它只适用于一维数组,但您可以使用它复制三维网格中包含的各种“一维数组块”。你会发现它很有用

如果你真的想要一台普通复印机,我只是在这里做了一些基本的测试。这很有趣,但我不认为它更好,因为您在灵活性方面获得的东西在可读性方面丢失了

private void copy(Object source, Object dest) {
    if(source.getClass().isArray() && dest.getClass().isArray()) {
        for(int i=0;i<Array.getLength(source); i++) {
            if(Array.get(source, i) != null && Array.get(source, i).getClass().isArray()) {
                copy(Array.get(source, i), Array.get(dest, i));
            } else {
                Array.set(dest, i, Array.get(source, i));
            }
        }
    }
}
private void copy(对象源、对象目标){
if(source.getClass().isArray()&&dest.getClass().isArray()){

对于(int i=0;我可能会重复感谢。我会尝试一下,但更优雅的做法是根本不指定三维,而是将其用于任何维度。是的,但我认为在所有实际用途中,多维通常会上升到三维。因此,您可以将其硬编码为二维副本和三维副本。谢谢。应该是这样的是最快的方法,但决不是优雅的。在问这个问题之前,我已经找到了标准方法()的一个很好的比较。我仍然希望有人可能知道一些不那么低级的东西。这是唯一通用的方法。(是的,这很难看。)您不会找到更好的方法。这绝对是一个解决方案!但不幸的是,它相当缓慢(可能是由于递归)。在我的应用程序中,我测量到它比硬编码版本慢两倍多。@LouisWasserman唯一的通用方法?返回一个完全独立构建的副本怎么样:有时你更关心的是没有被要求思考,而不是速度。除了创建一个ne,这种方法似乎是等效的w输出数组,我故意没有这样做,因为OP的问题没有要求它。