簡體   English   中英

Java - 二維整數數組的多級排序

[英]Java - Multilevel sort of a 2D array of integers

我試圖弄清楚如何在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}

這個怎么樣:

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

這是一種方法:

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

這是使用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]]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM