Получите строки и столбцы из Матрицы 2D-массива в Java
предположим, что у меня есть 2D-массив (матрица) в Java, как это...
int[][] MyMat = {{0,1,2,3,4}, {9,8,7,6,5}};
Если я хочу извлечь столбцы, я могу сделать это легко, как это...
int[] My0= MyMat[0]; //My0 = {0,1,2,3,4}
int[] My1= MyMat[1]; //My1 = {9,8,7,6,5}
но как я могу извлечь строк?...
int[] My_0= ?; //My_0 = {0,9}
int[] My_1= ?; //My_1 = {1,8}
int[] My_2= ?; //My_2 = {2,7}
int[] My_3= ?; //My_3 = {3,6}
int[] My_4= ?; //My_4 = {4,5}
есть ли стенография для достижения этого?
3 ответов
если вы хотите получить строки, вы должны получить значения из каждого массива, а затем создать новый массив из значений. Можно назначить значения вручную или использовать цикл for, например этот...
int[][] MyMat = {{0,1,2,3,4}, {9,8,7,6,5}};
// get your columns... (easy)
int[] My0= MyMat[0]; //My0 = {0,1,2,3,4}
int[] My1= MyMat[1]; //My1 = {9,8,7,6,5}
// get the rows... (manually)
int[] My_0= new int[]{MyMat[0][0],MyMat[1][0]}; //My_0 = {0,9}
int[] My_1= new int[]{MyMat[0][1],MyMat[1][1]}; //My_1 = {1,8}
int[] My_2= new int[]{MyMat[0][2],MyMat[1][2]}; //My_2 = {2,7}
int[] My_3= new int[]{MyMat[0][3],MyMat[1][3]}; //My_3 = {3,6}
int[] My_4= new int[]{MyMat[0][4],MyMat[1][4]}; //My_4 = {4,5}
// get the rows... (as a for-loop)
int size = MyMat.length;
int[] My_0 = new int[size]; //My_0 = {0,9}
int[] My_1 = new int[size]; //My_1 = {1,8}
int[] My_2 = new int[size]; //My_2 = {2,7}
int[] My_3 = new int[size]; //My_3 = {3,6}
int[] My_4 = new int[size]; //My_4 = {4,5}
for (int i=0;i<size;i++){
My_0[i] = MyMat[i][0];
My_1[i] = MyMat[i][1];
My_2[i] = MyMat[i][2];
My_3[i] = MyMat[i][3];
My_4[i] = MyMat[i][4];
}
в противном случае поверните весь массив так, чтобы он хранил {row,column}
вместо {column,row}
, как это...
int[][] MyMat = {{0,9},{1,8},{2,7},{3,6},{4,5}};
// get the rows... (easy)
int[] My_0= MyMat[0]; //My_0 = {0,9}
int[] My_1= MyMat[1]; //My_1 = {1,8}
int[] My_2= MyMat[2]; //My_2 = {2,7}
int[] My_3= MyMat[3]; //My_3 = {3,6}
int[] My_4= MyMat[4]; //My_4 = {4,5}
// get the columns... (manually)
int[] My0= new int[]{MyMat[0][0],MyMat[1][0],MyMat[2][0],MyMat[3][0],MyMat[4][0]}; //My0 = {0,1,2,3,4}
int[] My1= new int[]{MyMat[0][1],MyMat[1][1],MyMat[2][1],MyMat[3][1],MyMat[4][1]}; //My1 = {9,8,7,6,5}
// get the columns... (as a for-loop)
int size = MyMat.length;
int[] My0 = new int[size]; //My0 = {0,1,2,3,4}
int[] My1 = new int[size]; //My1 = {9,8,7,6,5}
for (int i=0;i<size;i++){
My0[i] = MyMat[0][i];
My1[i] = MyMat[1][i];
}
обратите внимание, что невозможно иметь стенографию, которая позволит вам легко получить как строки, так и столбцы - вам придется решить, какой вы хотите больше, и структурируйте массивы в этом формате.
Если мы знаем размер строки и размер столбца 2-d массива, мы можем достичь выше следующим образом
Пусть Нет.из рядов-рядов
Пусть Нет.колонн-clmns
int[][] my = new int[clmns][rows];
for(int i=0;i<clmns;i++)
for(int j=0;j< rows; j++)
my[i][j]=MyMat[j][i];
затем, принимая столбец во время, вы получаете массив строк вашего исходного массива.
в противном случае вы можете использовать массив ArrayList с длиной массива ваших строк, если нет.строки были заданы во время выполнения программы.
его просто, как это :
1 . Транспонировать ваши 2D матрицы 2 . Тогда делайте, как вы meint [] My0= MyMat[0]; int[] My1= MyMat[1];