【问题标题】:How to sort multidimensional double array based on 3rd column [duplicate]如何根据第三列对多维双精度数组进行排序[重复]
【发布时间】:2015-06-03 11:47:17
【问题描述】:

我有一个多维数组points[10][3],我需要根据第 3 列对其进行排序。我该怎么做?还有其他答案,但我觉得它们太高级了,有人可以像向 5 岁的孩子解释一样向我解释吗?

【问题讨论】:

标签: java comparator


【解决方案1】:

看看这个教程:https://docs.oracle.com/javase/tutorial/collections/interfaces/order.html,尤其是“比较器”部分。

你要排序的数据结构是一个二维数组,也可以看成是数组的数组(以数组为元素的数组):

// array containing 10 int[3]-arrays:
int[][] points = new int[10][3];

如果你想对'outer'数组进行排序,你的排序算法需要比较这个数组的元素,所以它必须处理int[3]项目,我们想通过它们的最后一个元素来比较它们(index = 2) .

Java 7(及以下)

我们可以实现一个Comparator,它能够通过它们的第三个元素来比较int 数组:

Comparator<int[]> comparator = new Comparator<int[]> {
    public int compare(int[] a1, int[] a2) {
        return Integer.compare(a1[2], a2[2]);
    }
}

现在,我们每次想要像这样对二维数组进行排序时都可以使用这个比较器:

Arrays.sort(points, comparator);

Java 8

由于 Java 8 更简单,您甚至不需要实现 Comparator。只需使用 lambda 表达式来定义您的比较策略:

Arrays.sort(points, Comparator.comparingInt(a -> a[2]));

【讨论】:

    【解决方案2】:

    你只是想使用一些逻辑思维。

    假设它是一个单一的维度数组并对其进行处理。

    //array with some temp values
            int points[][]={{5,5,16},{5,4,9},{6,7,10},{1,4,5},{1,5,2},{1,2,3},{2,1,10},{2,1,3},{5,5,2},{5,5,1}};
    
            //Just printing my array
            System.out.println("My Array :");
            for(int i=0;i<10;i++)
                System.out.println("{"+points[i][0]+","+points[i][1]+","+points[i][2]+"}");
    
            //using bubble sort
            for(int i=0;i<10;i++){
                for(int j=i+1;j<10;j++){
                    //only checking the 3rd column
                    if(points[i][2]>points[j][2])
                        swap(points[i],points[j]);
                }
            }
    
            System.out.println("After sorting :");
            for(int i=0;i<10;i++)
                System.out.println("{"+points[i][0]+","+points[i][1]+","+points[i][2]+"}");
    
    I got the below output,
    
    My Array :
    {5,5,16}
    {5,4,9}
    {6,7,10}
    {1,4,5}
    {1,5,2}
    {1,2,3}
    {2,1,10}
    {2,1,3}
    {5,5,2}
    {5,5,1}
    After sorting :
    {5,5,1}
    {5,5,2}
    {1,5,2}
    {1,2,3}
    {2,1,3}
    {1,4,5}
    {5,4,9}
    {2,1,10}
    {6,7,10}
    {5,5,16}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-07
      • 2017-12-29
      • 2017-01-04
      • 2012-10-19
      • 2018-08-17
      • 2012-06-15
      • 1970-01-01
      相关资源
      最近更新 更多