[英]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.