繁体   English   中英

Java排序二维数组

[英]Java sorting 2D array

给定一个像这样的二维数组

double[][] y = {{5,1},{0,0},{5,3},{5,2},{10,3},{12,100},{0,0}};

我将如何将它分类到它喜欢的地方

{ {0,0},{0,0},{5,1},{5,2},{5,3},{10,3},{12,100} };

这是我目前的方法

        Arrays.sort(sortedPoints, new Comparator<double[]>() {      
            @Override
            public int compare(double[] o1, double[] o2) {
                return Double.compare(o2[0], o1[0]);
            }
        });

使用lambda会缩短:D

Arrays.sort(y, (d1, d2) -> Double.compare(d1[0] + d1[1], d2[0] + d2[1]));

这仅在您尝试基于子数组总和进行排序时才有效,

Arrays.sort(sortedPoints, new Comparator<double[]>() {      
            @Override
            public int compare(double[] o1, double[] o2) {
                return Double.compare(o1[0]+o1[1],o2[0]+o2[1]);
            }
        });

对您的代码进行很少的更改;

当两个数组中的对的第一个元素相等时,就会丢失逻辑。

    Arrays.sort(sortedPoints, new Comparator<double[]>() {      
        @Override
        public int compare(double[] o1, double[] o2) {
            int diff = Double.compare(o1[0], o2[0]);
            if (diff == 0) {
                return Double.compare(o1[1], o2[1]);
            }
            return diff;
        }
    });

您可以先按第二个字段对数组进行两次排序,然后再按顺序对数组进行排序。

因此,这是一个示例:

public static void main(String[] args)
{
    System.out.println("Start");
    double[][] y = {{5,1},{0,0},{5,3},{5,2},{10,3},{12,100},{0,0}};

    Arrays.sort(y, (var a, var b) -> (int)(a[1]- b[1]));
    Arrays.sort(y, (var a, var b) -> (int)(a[0]- b[0]));

    for (int i = 0; i < y.length ; i++)
    {
        System.out.println("[" + y[i][0] + " , " + y[i][1] + "]");
    }

    System.out.println("End");}
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM