it-swarm.com.ru

Как получить столбец из 2D-массива Java?

Я знаю, что двумерные массивы являются массивами массивов. Чтобы получить строку вы можете сделать:

rowArray = my2Darray[row]

Поскольку каждая строка может быть разного размера, я предполагаю, что она не встроена для получения столбца из 2D-массива. Это заставляет меня думать, что вам нужно сделать что-то вроде:

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

Это правильно? Это единственный способ?

21
Derrick

Если вы привязаны к использованию 2d-массива, тогда да, это все. Тем не менее, предложение, которое может помочь вам (если это возможно):

Оберните массив в класс, который обрабатывает выборку столбца.

Удачи.

9
javamonkey79

В Commons Math есть несколько инструментов, которые вы можете попробовать:

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

Библиотека общей математики

7
daveb
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]; 
    }
}
2
Muhammad Daniyal

Твой путь - это путь. Однако, если вам придется делать это много раз, я могу порекомендовать хранить его в столбцах. (или оба пути)

2
jjnguy

На самом деле новейшая версия Apache Commons (3.5) не имеет класса BigMatrix. Вместо этого мы можем использовать RealMatrix

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

Ну, на самом деле я бы написал это как комментарий, но моя репутация все еще низка, поэтому я должен ответить:

Думаю, вы имеете в виду:

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

Кстати, я полагаю, вы правы. Нет более легкого пути.

1
Curd

Другой способ - сохранить строки в виде столбцов и наоборот. например Мне нужно было сделать то же самое, и я изначально планировал иметь массив из 10 строк и 2 столбцов. Из-за этого ограничения я просто поменял местами строки и столбцы и создал массив из 10 столбцов и 2 строк. Затем я могу использовать массив [0], чтобы получить строку из нового массива (который будет столбцом моего исходного массива). Конечно, вы обладаете такой гибкостью, только если вы являетесь создателем этого массива.

Надеюсь, это поможет...

0
VishP
    /**
     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 матрице.

0
yugi