2009-07-10 13 views
21

Wiem, że tablice 2d są tablicami tablic. Aby uzyskać wiersza można zrobić:Jak uzyskać kolumnę z tablicy 2D java?

rowArray = my2Darray[row] 

Ponieważ każdy wiersz może być inny rozmiar, jestem zakładając, że nie jest zbudowany w celu uzyskania kolumnę z tablicy 2D. Prowadzi mnie to do przekonania, że ​​musisz zrobić coś w stylu:

for(int row = 0; row < numRows; row++) 
{ 
    colArray[row] = m2Darray[row][columnOfInterest]; 
} 

Czy to prawda? Czy to jedyny sposób?

+1

Czy chodziło Ci 'colArray [ row] = m2Darray [wiersz] [columnOfInterest]; '? – ChssPly76

+0

tak, dziękuję :) – Derrick

Odpowiedz

8

Jeśli jesteś zablokowany do używania tablicy 2d, to tak, to jest to afaik. Jednak sugestia, która może ci pomóc (jeśli to możliwe):

Zawiń tablicę w klasę, która obsługuje pobieranie kolumny.

Powodzenia.

2

Twoja droga jest drogą. Jednakże, jeśli musisz to zrobić wiele razy, mogę zalecić przechowywanie go w kolumnach. (lub obie strony)

7

fotografia matematyka ma kilka narzędzi może chcesz sprawdzić:

double[][] data = new double[10][10]; 
BigMatrix matrix = MatrixUtils.createBigMatrix(data); 
matrix.getColumnAsDoubleArray(0); 

Commons Math Library

1

No faktycznie ja piszę to jako komentarz, ale moja reputacja jest jeszcze niska, więc muszę odpowiedzieć:

Chyba chodziło Ci o:

for(int row = 0; row < numRows; row++) 
{ 
    colArray[row] = m2Darray[row][columnOfInterest]; 
} 

BTW: Przypuszczam, że masz rację. Nie ma łatwiejszego sposobu.

0

Innym sposobem jest przechowywanie wierszy jako kolumn i odwrotnie. na przykład Musiałem zrobić dokładnie to samo i początkowo planowałem mieć tablicę z 10 rzędami i 2 colami. Z powodu tego ograniczenia zamieniłem po prostu moje wiersze i kolumny i utworzyłem tablicę z 10 kolumnami i 2 wierszami. Następnie mogę użyć tablicy [0], aby uzyskać wiersz z nowej tablicy (która byłaby kolumną mojej oryginalnej tablicy). Oczywiście masz tę elastyczność tylko wtedy, gdy jesteś twórcą tej tablicy.

nadzieję, że pomoże ...

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

spróbować tej

int column = 3; 
double result = array[][column]; 

Powodzenia

1

faktycznie najnowszą wersję Apache Commons (3.5) nie posiada klasę BigMatrix. Zamiast tego możemy użyć RealMatrix

double[][] data = new double[10][10]; 
RealMatrix rm = new Array2DRowRealMatrix(data); 
rm.getColumn(i); 
-2

Natknęliśmy się na ten post przez przypadek. Innym sposobem wykonywania operacji, takich jak kopiowanie lub manipulowanie tablicami na tablicach kolumn, jest transpozycja macierzy/macierzy.

Krótko mówiąc

  • się. transponuj 2Darray/matrix (tj.6x5 ==> 5x6 2Darray)
  • Wykonaj operacje na macierzach kolumn
  • transpose ponownie ==> wróć do oryginalnej 2Darray.

To podejście zostało wykorzystane w szew rzeźbienia - obraz technika przycinania

-1

Musisz użyć klasy StringBuilder dołączyć nową postać na końcu łańcucha

StringBuilder s=new StringBuilder(); 
    for(int i=0;i<n;i++) 
     s.append(arr[i][column]);