2012-06-18 35 views
6

Giả sử rằng tôi có một mảng 2D (ma trận) trong Java như thế này ...Lấy Hàng và Cột từ một ma trận mảng 2D trong Java

int[][] MyMat = {{0,1,2,3,4}, {9,8,7,6,5}}; 

Nếu tôi muốn trích xuất các cột, tôi có thể làm nó một cách dễ dàng như thế này ...

int[] My0= MyMat[0]; //My0 = {0,1,2,3,4} 
int[] My1= MyMat[1]; //My1 = {9,8,7,6,5} 

Nhưng làm thế nào tôi có thể trích xuất các hàng? ...

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} 

có viết tắt để đạt được điều này?

+1

Bạn không thể làm điều đó trong một dòng. Bạn nên xây dựng một mảng mới và điền nó với các giá trị ma trận [cột] [hàng] bằng tay, có thể bên trong một vòng lặp for. –

+0

Đồng ý, nó không thể trừ khi bạn xác định ma trận theo cách đó ban đầu, hoặc tự viết mã theo cách thủ công. – wattostudios

Trả lời

3

Nếu bạn muốn nhận các hàng, bạn cần lấy các giá trị từ mỗi mảng, sau đó tạo một mảng mới từ các giá trị. Bạn có thể gán các giá trị bằng tay, hoặc sử dụng một cho vòng lặp, như thế này ...

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

Nếu không, biến toàn bộ mảng của bạn xung quanh để nó lưu trữ {row,column} thay vì {column,row}, như thế này ...

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

Lưu ý rằng không thể viết nhanh cho phép bạn dễ dàng nhận cả hàng và cột - bạn sẽ phải quyết định bạn muốn gì hơn và cấu trúc các mảng ở định dạng đó .

1

Nếu chúng ta biết hàng kích thước và cột kích thước của 2-d mảng chúng ta có thể đạt được ở trên như sau

Hãy Hàng No.of - hàng

Hãy Cột 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]; 

Sau đó, lấy một cột tại thời điểm cung cấp cho bạn mảng hàng của mảng ban đầu của bạn.

Nếu không, bạn có thể sử dụng Array of ArrayList với chiều dài mảng của các hàng nếu các hàng no.of được cho vào thời gian chạy chương trình.

1

Đơn giản như sau:

1. Chuyển ma trận 2D của bạn 2. Sau đó, làm như bạn meint [] My0 = MyMat [0]; int [] My1 = MyMat [1];

Các vấn đề liên quan