【问题标题】:How to split a 2D Array to left and right arrays? [duplicate]如何将二维数组拆分为左右数组? [复制]
【发布时间】:2012-11-18 14:10:28
【问题描述】:

可能重复:
java: How to split a 2d array into two 2d arrays

需要的是拆分这个数组:

int[][] bitblock = {
    {1,0,1,0,1,0,1,0},
    {1,0,1,0,1,0,1,0},
    {1,0,1,0,1,0,1,0},
    {1,0,1,0,1,0,1,0},
    {1,0,1,0,1,0,1,0},
    {1,0,1,0,1,0,1,0},
    {1,0,1,0,1,0,1,0},
    {1,0,1,0,1,0,1,0}};

这是一个 8*8 的数组,我想把它拆分成左右数组并存放在这里:

int[][] leftblock = new int [bitblock.length][bitblock[0].length/2];
int[][] rightblock = new int [bitblock.length][bitblock[0].length/2];

我使用了 Syste.arraycopy 方法,我能够将位块拆分为上下数组,但我很难左右拆分它:

System.arraycopy(bitblock, 0, leftblock, 0, leftblock.length);
System.arraycopy(bitblock, rightblock.length, rightblock, 0, rightblock.length)

有人可以帮忙吗?谢谢

【问题讨论】:

标签: java split multidimensional-array arrays


【解决方案1】:

这应该可以很好地解决问题:

int[][] bitblock = {{1, 0, 1, 0, 1, 0, 1, 0}, {1, 0, 1, 0, 1, 0, 1, 0}, {1, 0, 1, 0, 1, 0, 1, 0}, {1, 0, 1, 0, 1, 0, 1, 0}, {1, 0, 1, 0, 1, 0, 1, 0}, {1, 0, 1, 0, 1, 0, 1, 0}, {1, 0, 1, 0, 1, 0, 1, 0}, {1, 0, 1, 0, 1, 0, 1, 0}};

    int[][] leftblock = new int[bitblock.length][bitblock[0].length / 2];
    int[][] rightblock = new int[bitblock.length][bitblock[0].length / 2];

    for (int i = 0; i < bitblock.length; i++) {
        for (int j = 0; j < bitblock[0].length / 2; j++) {
            leftblock[i][j] = bitblock[i][j];
        }

        for (int j = bitblock[0].length / 2; j < bitblock[0].length; j++) {
            rightblock[i][j - bitblock[0].length / 2] = bitblock[i][j];
        }
    }

您也可以使用 System.arraycopy,因为它使代码更加清晰,便于将来检查。 至于性能,我认为只要您的阵列很小,这并不重要。

【讨论】:

    【解决方案2】:

    对于 8x8 数组,使用巧妙的数组复制方法可能会带来最小的性能优势。我建议您使用嵌套的 for 循环简单地编写代码。代码会更简单,你会(本来)更快地完成工作。

    【讨论】:

    • 是的..我想我是否可以使用快捷方式来做到这一点。这将是更好的编程结构,但是我会这样做嵌套循环
    【解决方案3】:

    试试这个:

    for (int i = 0 ; i < bitblock.length ; i++) {
        System.arraycopy(bitblock[i], 0, leftblock[i], 0, leftblock[i].length);
    
        System.arraycopy(bitblock[i], bitblock[0].length/2, 
                                        rightblock[i], 0, leftblock[i].length);
    }
    

    我个人认为在这种情况下嵌套循环不会更好 - 您不妨使用System.arraycopy 的功能,而不是自己重新发明轮子。在我看来,这也比嵌套循环更容易管理/阅读。

    【讨论】:

      猜你喜欢
      • 2022-07-06
      • 2011-07-24
      • 2016-03-15
      • 2016-08-10
      • 1970-01-01
      • 1970-01-01
      • 2014-08-28
      • 2020-11-18
      • 1970-01-01
      相关资源
      最近更新 更多