如何从2D java数组中获取列?

我知道2d数组是数组的数组。 要获得一行,你可以做:

rowArray = my2Darray[row] 

由于每行可以是不同的大小,我假设它不是为了从2D数组中获取列而内置的。 这让我相信你必须做的事情如下:

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

它是否正确? 这是唯一的方法吗?

如果你被锁定使用二维数组,那么是的,这就是它。 但是,建议可以帮助您(如果可能):

将数组包装在处理列提取的类中。

祝你好运。

Commons math有一些你可能想要查看的工具:

 double[][] data = new double[10][10]; BigMatrix matrix = MatrixUtils.createBigMatrix(data); matrix.getColumnAsDoubleArray(0); 

Commons Math Library

你的方式是要走的路。 但是,如果您必须多次这样做,我可能建议将其存储在列中。 (或两种方式)

 int[][] array = new int[rows][coloumn]; for (int i = 0 ; i < array.length ; i++) { for (int j = 0 ; j < array[].length; j++) { int col = array[j][i]; } } 

那么实际上我会把它写成评论,但我的声誉仍然很低,所以我必须回答:

猜猜你的意思是:

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

顺便说一句:我想你是对的。 没有更简单的方法。

实际上最新版本的Apache Commons(3.5)没有BigMatrix类。 而不是这个,我们可以使用RealMatrix

 double[][] data = new double[10][10]; RealMatrix rm = new Array2DRowRealMatrix(data); rm.getColumn(i); 

另一种方法是将行存储为列,反之亦然。 例如,我需要做同样的事情,我原本计划有一个包含10行和2列的数组。 由于这个限制,我只是交换了我的行和列,并创建了一个包含10列和2行的数组。 然后我可以使用array [0]从新数组中获取行(这将是我原始数组的一列)。 当然,只有当您是该arrays的创建者时,才具有这种灵活性。

希望有帮助……

  /** input data **/ int[][] r = { {1, 2}, {3, 4} }; //the colum index int colIndex = 1; Integer[] col = Arrays.stream(r).stream().map(arr -> arr[colIndex]).toArray(size -> new Integer[size]); //col data for (Integer integer : col) { System.out.println(integer); } 

这里它将以2D矩阵打印一个完整的列数据。

您必须使用StringBuilder类在字符串的末尾追加新字符

  StringBuilder s=new StringBuilder(); for(int i=0;i 

刚碰到这篇文章的机会。 在列arrays上执行arrays复制或操作等操作的另一种方法是转置arrays/矩阵。

简短地说

  • 一个。 转置2Darrays/矩阵(即6×5 ==> 5×6 2Darray)
  • 对列数组执行操作
  • 再次转置==>回到原来的2Darrays。

这种方法已被用于接缝雕刻 – 图像裁剪技术

试试这个

 int column = 3; double result = array[][column]; 

祝好运