簡體   English   中英

如何減少二維數組

[英]how to reduce 2d array

我有一個二維數組,我們這樣說:

2   0   8   9
3   0  -1  20
13  12  17  18
1   2   3   4
2   0   7   9

如何創建一個減少了第二行和第三列的數組?

2   0    9
13  12   18
1   2    4
2   0    9

刪除數組中的行和列是昂貴的操作,因為您需要移動某些東西,但是這些方法可以實現您想要的:

static int[][] removeRow(int[][] data, int r) {
    int[][] ret = new int[data.length - 1][];
    System.arraycopy(data, 0, ret, 0, r);
    System.arraycopy(data, r+1, ret, r, data.length - r - 1);
    return ret;
}

static int[][] removeColumn(int[][] data, int c) {
    for (int r = 0; r < data.length; r++) {
        int[] row = new int[data[r].length - 1];
        System.arraycopy(data[r], 0, row, 0, c);
        System.arraycopy(data[r], c+1, row, c, data[r].length - c - 1);
        data[r] = row;
    }
    return data;
}

但是,您可能希望研究其他允許便宜刪除的數據結構,即雙向鏈接列表。 參見,例如, 跳舞鏈接

public class TestMe {

/**
 * @param args
 */
public static void main(String[] args) {
    // TODO Auto-generated method stub

    int array[][] = {{2,0,   8,   9,},
                        {3,   0,  -1,  20},
                        {13,  12,  17,  18},
                        {1,   2,   3,   4,},
                        {2,   0,   7,   9}};

    for(int i=0; i<array.length;i++){
        if(i == 1 ){
            continue;
        }
        for(int j=0; j<array[i].length;j++){
            if(j==2){
                continue;
            }
            System.out.print(array[i][j]+" ");
        }
        System.out.println("");
    }


}

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM