在二维数组中,我可以轻松获取行的数组,如何将列作为数组?我需要一个适用于对象的解决方案,而不仅仅是原语。感谢
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];
}
答案 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