从java中的二维数组中获取列

时间:2015-05-24 18:31:08

标签: java multidimensional-array

在二维数组中,我可以轻松获取行的数组,如何将列作为数组?我需要一个适用于对象的解决方案,而不仅仅是原语。感谢

        int counter = 1;
    int[][] matrix = new int[9][9];

    for (int x = 0; x < matrix.length; x++) {
        for (int y = 0; y < matrix[0].length; y++) {
            matrix[x][y] = counter;
            System.out.print(counter + " ");
            counter++;
        }
        System.out.println();
    }

    for (int x = 0; x < matrix.length; x++) {
        int[] row = matrix[x];  
    }

6 个答案:

答案 0 :(得分:5)

没有&#34;开箱即用&#34;方式,但你可以为此创建一个静态方法:

public static Object[] getColumn(Object[][] array, int index){
    Object[] column = new Object[array[0].length]; // Here I assume a rectangular 2D array! 
    for(int i=0; i<column.length; i++){
       column[i] = array[i][index];
    }
    return column;
}

答案 1 :(得分:3)

以下是使用Java 8流的方法:

int[] getColumn(int[][] matrix, int column) {
    return IntStream.range(0, matrix.length)
        .map(i -> matrix[i][column]).toArray();
}

如果你想处理太短的行:

int[] getColumn(int[][] matrix, int column, int defaultVal) {
    return IntStream.range(0, matrix.length)
        .map(i -> matrix[i].length < column ? defaultVal : matrix[i][column])
        .toArray();
}

答案 2 :(得分:1)

这是另一个适用于对象的Java 8答案:

// Make 2D array of objects
Obj[][] obj = {{new Obj(0),new Obj(1)},{new Obj(2),new Obj(3)}};

// To get a row:
int rowToGet = 1;
Obj[] oRow = obj[rowToGet];

// To get a column:
int colToGet = 1;
Obj[] oCol = Arrays.stream(obj).map(o -> o[colToGet]).toArray(Obj[]::new);

// Print the row:
System.out.println(Arrays.toString(oRow));
// Print the column:
System.out.println(Arrays.toString(oCol));

// Here is the object used for this example
class Obj {
    int in;
    String str;

    public Obj(){};

    public Obj(int in){
        this.in = in;
        switch(in){
            case 0:
                str = "zero";
                break;
            case 1:
                str = "one";
                break;
            case 2:
                str = "two";
                break;
            case 3:
                str = "three";
                break;
        }
    }

    @Override
    public String toString(){
        return String.format("%d=%s",in,str);
    }
}

这将产生输出:

Extracted row: [2=two, 3=three]
Extracted col: [1=one, 3=three]

答案 3 :(得分:0)

没有简单的方法。您必须迭代数组并自己构造列数组。

你应该注意&#34;列数组&#34;如果您的2D数组具有不同长度的行,则定义不明确。例如,如果第2行只有2列,您将如何创建第3列数组?

如果您的2D阵列是矩阵(即所有行具有相同的长度),则很容易创建一个2D阵列,其行是原始2D阵列的列。然后,您可以轻松获取原始数组的列。

答案 4 :(得分:0)

你可以这样做:

for(int row = 0; row < numRows; row++) {
    colArray[row] = my2Darray[row][columnOfInterest];
}

Apache commons有这方面的工具,请检查this answer

答案 5 :(得分:0)

您可以这样做:

ufw allow from any to any port 9000 proto tcp