簡體   English   中英

如何根據列的總和組織二維數組的列?

[英]How to organize columns of 2D array based on sum of columns?

我想按每列總和的降序組織一個二維數組。 例如:

3 1 1
2 6 5
5 4 2

第 1 列的總和為 10,第 2 列為 11,第 3 列為 8。第 2 列和第 1 列需要切換才能按降序排序。 更新后的二維數組將是:

1 3 1
6 2 5
4 5 2

我知道Collections.reverseOrder() ,但這僅適用於按降序排序一維 arrays 。

這是我用來獲取每列總和的代碼:

int tempSum = 0;
for (int i = 0; i < columns; i++) {
    for (int j = 0; j < rows; j++) {
        tempSum = array[i][j]
    }
    //reset tempSum
    tempSum = 0;
}

我目前沒有對每列的 tempSum 做任何事情。 任何指導都會很棒。

嘗試這個。

int[][] transpose(int[][] matrix) {
    int rows = matrix.length, cols = matrix[0].length;
    int[][] transposed = new int[cols][rows];
    for (int r = 0; r < rows; ++r)
        for (int c = 0; c < cols; ++c)
            transposed[c][r] = matrix[r][c];
    return transposed;
}

int[][] m = {
    {3, 1, 1, 9},
    {2, 6, 5, 4},
    {5, 4, 2, 6}};
m = transpose(m);
Arrays.sort(m, Collections.reverseOrder(Comparator.comparingInt(row -> IntStream.of(row).sum())));
m = transpose(m);
for (int[] row : m)
    System.out.println("\t" + Arrays.toString(row));

output

[9, 1, 3, 1]
[4, 6, 2, 5]
[6, 4, 5, 2]

或者,如果您需要更高的性能

m = transpose(m);
m = Arrays.stream(m)
    .map(row -> new Object() {
        int sum = IntStream.of(row).sum();
        int[] origin = row;
    })
    .sorted((a, b) -> Integer.compare(b.sum, a.sum))
    .map(obj -> obj.origin)
    .toArray(int[][]::new);
m = transpose(m);

暫無
暫無

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

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