基于两列对二维数组进行排序

问题描述 投票:0回答:4

我有 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)来对数组进行排序。

java arrays sorting
4个回答
5
投票

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

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];
         }
});

3
投票

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

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

2
投票

对于 n*2 数组

基于第1列排序(升序)

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

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

根据第1列排序(降序)

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

基于第2列排序(升序)

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

根据第2列排序(降序)

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

0
投票

在java 8中,你可以使用

Arrays.sort(array, (a,b) -> (b[0],a[0])); // in a descending order
© www.soinside.com 2019 - 2024. All rights reserved.