基于两列排序2D数组

时间:2017-02-20 07:02:48

标签: java arrays sorting

我有2D数组,它有2列,我想对此进行排序。

输入是这样的:

第一栏.....第二栏

3 ...................... 2

4 ...................... 9

3 ...................... 1

5 ...................... 0

1 ...................... 2

输出是这样的:

第一栏.....第二栏

5 ...................... 0

4 ...................... 9

3 ...................... 2

3 ...................... 1

1 ...................... 2

我是Java初学者。

请帮我查看函数代码(mySort(int [] [] arr)对数组进行排序。

4 个答案:

答案 0 :(得分:1)

您可以使用自定义比较器进行排序:

Arrays.sort(datas, new Comparator<Integer[]>() {
         @Override
         public int compare(Integer[] entry1, Integer[] entry2) {
                if(entry1[0] == entry2[0]){
                       return entry2[1] - entry1[1];
                }
                return entry2[0] - entry1[0];
         }
});

答案 1 :(得分:0)

使用java 8时,您也可以这样做:

    Comparator<Integer[]> comparator = Comparator.comparing(x -> x[0])
    .thenComparing(x -> x[1]);
    // when
    Arrays.sort(a, comparator.reversed());

答案 2 :(得分:0)

在Java 8中,您可以使用

Arrays.sort(array, (a,b) -> (b[0],a[0])); // in a descending order

答案 3 :(得分:0)

对于 n*2 数组

按 column1 排序(升序)

    Arrays.sort(arr, (a,b)-> {
            if(a[0] == b[0]){
                return a[1] - b[1];
         }
         return a[0] - b[0];
  });

//这里'arr'是一个n*2的数组

基于 column1(降序)排序

Arrays.sort(arr, (a,b)-> {
            if(b[0] == a[0]){
                return b[1] - a[1];
         }
         return b[0] - a[0];
  });

按 column2 排序(升序)

 Arrays.sort(arr, (a,b)-> {
            if(a[1] == b[1]){
                return a[0] - b[0];
         }
         return a[1] - b[1];
  });

基于 column2(降序)排序

Arrays.sort(arr, (a,b)-> {
            if(b[1] == a[1]){
                return b[0] - a[0];
         }
         return b[1] - a[1];
  });