【问题标题】:Java - Multilevel sort of a 2D array of integersJava - 二维整数数组的多级排序
【发布时间】:2020-02-15 11:43:47
【问题描述】:

我试图弄清楚如何在 java 中对二维整数数组进行多级排序, 其中第一个数字优先。

所以像这样的数据集:-

{1,2}
{2,9}
{2,7}
{2,8}
{5,6}
{5,8}
{5,2}
{4,1}
{4,4}

应该返回如下内容:-

{1,2}
{2,7}
{2,8}
{2,9}
{4,1}
{4,4}
{5,2}
{5,6}
{5,8}

【问题讨论】:

  • 我之前发布了一个答案,结果证明是不正确的 - 我很抱歉。请查看我发布的最新答案。

标签: java arrays sorting 2d


【解决方案1】:

这个怎么样:

for(int i = 0; i < arr.length; i++)
{
    int min = i;

    for(int j = i; j < arr.length; j++)
    {
        if(arr[min][0] > arr[j][0])
        {
            min = j;
        }
    }

    int[] temp = arr[min];
    arr[min] = arr[i];
    arr[i] = temp;
}

for(int i = 0; i < arr.length; i++)
{
    int min = i;
    for(int j = i; j < arr.length; j++)
    {
        if(arr[j][0] != arr[i][0])
        break;

        if(arr[min][1] > arr[j][1])
        min = j;
    }

    int[] temp = arr[min];
    arr[min] = arr[i];
    arr[i] = temp;
}

【讨论】:

    【解决方案2】:

    这是一种方法:

    import java.util.*;
    
    public class Test
    {
         public static void main(String []args)
         {
             Integer[][] a = {
                        {1,2},
                        {2,9},
                        {2,7},
                        {2,8},
                        {5,6},
                        {5,8},
                        {5,2},
                        {4,1},
                        {4,4}
                      };
    
            Arrays.sort(a, new Comparator<Integer[]>()
            {
                public int compare(Integer[] a, Integer[] b)
                {
                    int res = a[0].compareTo(b[0]);
                    if(res!=0)
                        return res;
                    return a[1].compareTo(b[1]);
                }
            });
    
            System.out.println(Arrays.deepToString(a));
         }
    }
    

    【讨论】:

      【解决方案3】:

      这是使用Comparator.class的解决方案

      int[][] array = {{1,2},{2,9}, {2,7},{2,8},{5,6},{5,8},{5,2},{4,1},                    {4,4}};
      
      Arrays.sort(array, new Comparator<int[]>() {
                  @Override
                  public int compare(int[] o1, int[] o2) {
                      if(o1[0] == o2[0]){
                          return o1[1]-o2[1];
                      }else {
                          return o1[0]-o2[0];
                      }
                  }
              });
      System.out.println(Arrays.deepToString(array));
      

      打印这个:[[1, 2], [2, 7], [2, 8], [2, 9], [4, 1], [4, 4], [5, 2], [5, 6], [5, 8]]

      【讨论】:

      • 如果对您有帮助并点赞,您可以通过将其标记为答案来支持该帖子!谢谢
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多