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?
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.
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);
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];
}
}
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)
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);
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.
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...
/**
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.