Java 二維數組按指定列排序
簡介:
在做項目時,需要對一個二維數組,按照指定的列進行排序。
效果圖:
代碼實現:
public static void main(String[] args) {
int[][] nums = initialArray(5, 3);
System.out.println("排序前:");
printArr(nums);
System.out.println("排序後:");
// 先根據第1列比較,若相同則再比較第0列
sortByColumn(nums, new int[] {1, 0});
printArr(nums);
}
/**
* 打印二維數組
* @param nums 數組
*/
private static void printArr(int[][] nums) {
for (int i = 0; i < nums.length; i++) {
System.out.println(Arrays.toString(nums[i]));
}
}
/**
* 構造一個row * col的二維數組
* @param row 二維數組的行數
* @param col 二維數組的列數
* @return 構造的二維數組
*/
private static int[][] initialArray(int row, int col) {
int[][] arr = new int[row][col];
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
// 0-100的隨機數
arr[i][j] = (int) (Math.random() * 100);
}
}
return arr;
}
/**
* 按列排序
* @param ob 待排序的數組
* @param order 列排序的優先級, 如:new int{1, 2} 先根據第一列比較,若相同則再比較第二列
*/
private static void sortByColumn(int[][] ob, final int[] order) {
Arrays.sort(ob, new Comparator<Object>() {
public int compare(Object o1, Object o2) {
int[] one = (int[]) o1;
int[] two = (int[]) o2;
for (int i = 0; i < order.length; i++) {
int k = order[i];
if (one[k] > two[k]) {
return 1;
} else if (one[k] < two[k]) {
return -1;
} else {
continue;
}
}
return 0;
}
});
}