从 Java 中的二维数组矩阵中获取行和列

Posted

技术标签:

【中文标题】从 Java 中的二维数组矩阵中获取行和列【英文标题】:Get the Rows and Columns from a 2D array matrix in Java 【发布时间】:2012-06-20 00:55:32 【问题描述】:

假设我在 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

有没有什么捷径可以做到这一点?

【问题讨论】:

你不能在一行中做到这一点。您应该构建一个新数组并手动填充 matrix[column][row] 值,可能在 for 循环内。 同意,除非您最初以这种方式定义矩阵,或者自己手动编码,否则这是不可能的。 【参考方案1】:

如果要获取行,则需要从每个数组中获取值,然后根据这些值创建一个新数组。您可以手动分配值,也可以使用 for 循环,例如 this...

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】:

如果我们知道二维数组的大小行列大小我们可以如下实现

让 No.of Rows - rows

让列数 -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 数组和行数。

【讨论】:

【参考方案3】:

就这么简单:

1 .转置你的二维矩阵 2.然后按照你的意思做[] My0= MyMat[0]; int[] My1= MyMat[1];

【讨论】:

以上是关于从 Java 中的二维数组矩阵中获取行和列的主要内容,如果未能解决你的问题,请参考以下文章

java基础_二维数组的行和列

c语言:将一个二维数组行和列的元素互换,存到另一个二维数组中。

寻找二维数组中唯一的行和列的索引,以及这些位置上元素的最小和。

二维数组3:搜索二维矩阵

行列有序的二维数组查找

C语言 将一个二维数组行和列的元素互换,存到另一个二维数组中