1. 程式人生 > >[解決方案]java多維陣列按照某幾列進行排序

[解決方案]java多維陣列按照某幾列進行排序

情景:

有一個二維陣列,我想按照第一,第二,第三列進行降序排列。

注意:
1、如果第一列數值相同,那麼就按照第二列降序排列。
2、同理,如果第二列數值相同,那麼就按照第三列降序排列。

程式碼如下:

import java.util.Comparator;    
      
  public class ArraySort {    
      
      public static void sort(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; } }); } public static void main(String[] args) { int array[][] = new int[][] { { 12, 34, 68, 32, 9, 12, 545 }, { 34, 72, 82, 57, 56, 0, 213 }, { 12, 34, 68, 32, 21, 945, 23 }, { 91, 10, 3, 2354, 73, 34, 18 }, { 12, 83, 189, 26, 27, 98, 33 }, { 47, 23, 889, 24, 899, 23, 657 }, { 12, 34, 68, 343, 878, 235, 768 }, { 12, 34, 98, 56, 78, 12, 546 }, { 26, 78, 2365, 78, 34, 256, 873 } }; //先根據第一列比較,若相同則再比較第二列,若第二列相同,則比較第三列 sort(array, new int[] {0,1,2}); for (int i = 0; i < array.length; i++) { for (int j = 0; j < array[i].length; j++) { System.out.print(array[i][j]); System.out.print("\t"); } System.out.println(); } } }
注意:

1、如果想要升序排列,需要將sort()方法for()迴圈中的if判斷修改一下。如下:

if (one[k] >two[k]) {    
          return 1;    
} else if (one[k] < two[k]) {    
            return -1;    
} else {    
       continue;  //如果按一條件比較結果相等,就使用第二個條件進行比較。  
}    

2、如果想要按照某幾列進行排序,則需要修改sort()中的第二個引數final int[] order
比如,想要按照第一列,第三列進行排序。則如下:

sort(array,new int{0,2})

注意sort,第一個引數為進行排序的二維陣列。