web-dev-qa-db-fra.com

Comment obtenir une colonne d'un tableau Java 2D?

Je sais que les tableaux 2D sont des tableaux de tableaux. Pour obtenir une rangée, vous pouvez faire:

rowArray = my2Darray[row]

Étant donné que chaque ligne peut avoir une taille différente, je suppose qu’elle n’est pas intégrée pour extraire une colonne d’un tableau 2D. Cela me porte à croire que vous devriez faire quelque chose comme:

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

Est-ce correct? Est-ce le seul moyen?

21
Derrick

Si vous êtes contraint d'utiliser un tableau 2d, alors oui, c'est toujours ça. Cependant, une suggestion qui pourrait vous aider (si possible):

Enveloppez le tableau dans une classe qui gère l'extraction de colonne.

Bonne chance.

9
javamonkey79

Commons maths a quelques outils que vous voudrez peut-être consulter:

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

Bibliothèque de mathématiques Commons

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

Votre chemin est le chemin à parcourir. Cependant, si vous devez le faire plusieurs fois, je peux recommander de le stocker dans des colonnes. (ou dans les deux sens)

2
jjnguy

En fait, la dernière version d’Apache Commons (3.5) n’a pas la classe BigMatrix. Au lieu de cela, nous pouvons utiliser RealMatrix

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

En fait, j’écrirais cela comme un commentaire, mais ma réputation étant encore trop basse, je dois répondre:

Je suppose que tu veux dire:

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

BTW: Je suppose que vous avez raison. Il n'y a pas de moyen plus simple.

1
Curd

Une autre méthode consiste à stocker les lignes sous forme de colonnes et inversement. par exemple. J'avais besoin de faire exactement la même chose et je prévoyais à l'origine d'avoir un tableau avec 10 lignes et 2 colonnes. En raison de cette limitation, j'ai simplement échangé mes lignes et mes colonnes et créé un tableau avec 10 colonnes et 2 lignes. Ensuite, je peux utiliser array [0] pour obtenir la ligne du nouveau tableau (qui serait une colonne de mon tableau d'origine). Bien sûr, vous n’avez cette flexibilité que si vous êtes le créateur de ce tableau.

J'espère que cela pourra aider...

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);
    }

Ici, les données d'une colonne entière seront imprimées dans une matrice 2D.

0
yugi