web-dev-qa-db-ja.com

2D Java配列から列を取得する方法?

2D配列は配列の配列であることを知っています。行を取得するには、次を実行します。

rowArray = my2Darray[row]

各行は異なるサイズになる可能性があるため、2D配列から列を取得するために組み込まれていないと想定しています。次のようなことをしなければならないと信じるようになります。

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

これは正しいです?それが唯一の方法ですか?

23
Derrick

2D配列を使用するようにロックダウンされている場合、はい、これは不便です。ただし、役立つ可能性のある提案(可能な場合):

列のフェッチを処理するクラスで配列をラップします。

幸運を。

9
javamonkey79

Commons mathには、チェックアウトしたいツールがいくつかあります。

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

Commons Math Library

7
daveb

あなたの道は行く道です。ただし、それを何度も行う必要がある場合は、列に格納することをお勧めします。 (またはその両方)

2
jjnguy

実際、Apache Commonsの最新バージョン(3.5)にはBigMatrixクラスがありません。これの代わりに、RealMatrixを使用できます。

double[][] data = new double[10][10];
RealMatrix rm = new Array2DRowRealMatrix(data);
rm.getColumn(i);
1
bolec_kolec
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]; 
    }
}
1

まあ実際に私はこれをコメントとして書きますが、私の評判はまだ低いので、答えなければなりません:

あなたが意味すると思います:

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

ところで:あなたは正しいと思います。簡単な方法はありません。

1
Curd

別の方法は、行を列として保存することです。例えば私はまったく同じことをする必要があり、当初は10行2列の配列を作成することを計画していました。この制限のため、行と列を交換し、10列と2行の配列を作成しました。次に、array [0]を使用して、新しい配列(元の配列の列)から行を取得できます。もちろん、この配列の作成者である場合にのみ、この柔軟性が得られます。

お役に立てば幸いです...

0
VishP
    /**
     input data
    **/
    int[][] r = {
            {1, 2},
            {3, 4}
    };
    //the colum index
    int colIndex = 1;
    Integer[] col = Arrays.stream(r).stream().map(arr -> arr[colIndex]).toArray(size -> new Integer[size]);
    //col data
    for (Integer integer : col) {
        System.out.println(integer);
    }

ここでは、1つの列データ全体を2Dマトリックスで印刷します。

0
yugi