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

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

rowArray = my2Darray[row]

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

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

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


person Derrick    schedule 10.07.2009    source источник
comment
Вы имели в виду colArray[row] = m2Darray[row][columnOfInterest];?   -  person ChssPly76    schedule 11.07.2009
comment
Если вам нужно было получить доступ к большому количеству столбцов, может помочь транспонирование матрицы в качестве шага предварительной обработки, а затем доступ к строкам транспонированной матрицы.   -  person rahs    schedule 30.01.2019


Ответы (10)


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

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

Удачи.

person javamonkey79    schedule 10.07.2009

У математики Commons есть несколько инструментов, которые вы, возможно, захотите проверить:

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

Библиотека Commons Math

person daveb    schedule 10.07.2009

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

person jjnguy    schedule 10.07.2009

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

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

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

BTW: Я полагаю, вы правы. Нет более простого способа.

person Curd    schedule 10.07.2009

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

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

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

person yugi    schedule 26.06.2018

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

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

person Community    schedule 12.08.2009

Вы должны использовать класс StringBuilder для добавления нового символа в конец строки.

    StringBuilder s=new StringBuilder();
    for(int i=0;i<n;i++)
        s.append(arr[i][column]);
person Harsh Gupta    schedule 11.01.2017

Просто случайно наткнулся на этот пост. Другой способ выполнения таких операций, как копирование массива или манипулирование массивами столбцов, — это транспонирование вашего массива/матрицы.

Короче говоря

  • а. транспонировать 2Darray/матрицу (т.е. 6x5 ==> 5x6 2Darray)
  • Выполнение операций над массивами столбцов
  • снова транспонировать ==> вернуться к исходному 2Darray.

Этот подход был использован в вырезании по шву - техника обрезки изображения.

person Paul Mai    schedule 11.04.2016

попробуй это

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

Удачи

person David    schedule 13.11.2013