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

时间:2012-02-21 22:06:01

标签: 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];
        }
    }
}           

表示每个数组。这感觉压低了低水平和抗干燥。任何人都可以提出更通用的方法吗?

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

如果你真的想要一台仿制复印机,我只是在这里掀起了这个并做了一些基本测试。这很有趣,但我认为它没有任何好处,因为你在灵活性方面获得的东西在可读性上会失去。

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

答案 2 :(得分:0)

我不知道更常见的做法。我只想定义一个函数来完成它。

  public void copyMultidimensionalArray(int[][][] destination,int[][][] source)
    {
        // your above code here   
    }

然后我只是每次都调用该函数。

 copyMultidimensionalArray(grid_copy,grid);

不能比那更优雅,我可以吗?

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