簡體   English   中英

如何從2D java數組中獲取列?

[英]How to get a column from a 2D java array?

我知道2d數組是數組的數組。 要獲得一行,你可以做:

rowArray = my2Darray[row]

由於每行可以是不同的大小,我假設它不是為了從2D數組中獲取列而構建的。 這讓我相信你必須做的事情如下:

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

它是否正確? 這是唯一的方法嗎?

如果你被鎖定使用二維數組,那么是的,這就是它。 但是,一個可能對您有幫助的建議(如果可能):

將數組包裝在處理列提取的類中。

祝好運。

Commons math有一些你可能想要查看的工具:

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

Commons Math Library

你的方式是要走的路。 但是,如果您必須多次執行此操作,我可能建議將其存儲在列中。 (或兩種方式)

實際上,我把它寫成評論,但我的聲譽仍然很低,所以我必須回答:

猜猜你的意思是:

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

順便說一句:我想你是對的。 沒有更簡單的方法。

實際上最新版本的Apache Commons(3.5)沒有BigMatrix類。 而不是這個,我們可以使用RealMatrix

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

另一種方法是將行存儲為列,反之亦然。 例如,我需要做同樣的事情,而我原本計划擁有一個包含10行和2列的數組。 由於這個限制,我只是交換了我的行和列,並創建了一個包含10列和2行的數組。 然后我可以使用array [0]從新數組中獲取行(這將是我原始數組的一列)。 當然,只有當您是該陣列的創建者時,才具有這種靈活性。

希望有幫助......

    /**
     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);
    }

在這里,它將以2D矩陣打印一個完整的列數據。

您必須使用StringBuilder類在字符串的末尾追加新字符

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

剛剛偶然發現了這篇文章。 在列陣列上執行陣列復制或操作等操作的另一種方法是轉置陣列/矩陣。

簡而言之

  • 一個。 轉置2D陣列/矩陣(即6x5 ==> 5x6 2Darray)
  • 對列數組執行操作
  • 再次轉置==>回到原來的2D陣列。

這種方法已被用於接縫雕刻 - 圖像裁剪技術

試試這個

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

祝好運

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM