web-dev-qa-db-ja.com

Javaの2D配列行列から行と列を取得します

私がJavaにこのように2D配列(行列)があると仮定します...

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}

これを達成するための省略形はありますか?

8
Anita

行を取得する場合は、各配列から値を取得し、その値から新しい配列を作成する必要があります。値を手動で割り当てるか、次のような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];
}

行と列の両方を簡単に取得できるようにする省略形を使用することはできないことに注意してください。どちらを追加するかを決定し、配列をその形式にする必要があります。

3
wattostudios

2次元配列の行と列のサイズがわかっている場合、次のようにして上記を達成できます。

行数を許可-行

No.of列を-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]; 

次に、一度に列を取得すると、元の配列の行配列が得られます。

それ以外の場合、プログラムの実行時にno.of行が指定されていれば、行の配列長でArrayList of ArrayListを使用できます。

1
Theja

このように単純です:

1。 2D行列を転置します2。次にmeint [] My0 = MyMat [0];を実行します。 int [] My1 = MyMat [1];

0
Daman Jha