java Arrays.sort 2d数组

Dax*_*rax 33 java arrays sorting api

所以,

我期待根据[] [0]的值对以下数组进行排序

double[][] myArr = new double[mySize][2];
Run Code Online (Sandbox Code Playgroud)

所以对于ex,myArr的内容是:

1      5
13     1.55
12     100.6
12.1   .85
Run Code Online (Sandbox Code Playgroud)

我希望它能够:

1      5
12     100.6
12.1   .85
13     1.55
Run Code Online (Sandbox Code Playgroud)

我希望这样做而不必实现我自己的排序.任何帮助表示赞赏,谢谢.

Per*_*ror 58

使用重载数组#Sort(T [] a,Comparator c)将Comparator作为第二个参数.

double[][] array= {
{1, 5},
{13, 1.55},
{12, 100.6},
{12.1, .85} };

java.util.Arrays.sort(array, new java.util.Comparator<double[]>() {
    public int compare(double[] a, double[] b) {
        return Double.compare(a[0], b[0]);
    }
});
Run Code Online (Sandbox Code Playgroud)

  • 减法可能不起作用; 你应该使用`Double.compare(b [0],a [0])`代替. (3认同)
  • 当sort期望一维数组时,如何将2D数组作为参数传递?这不适合我. (2认同)
  • 关键不是它们是否足够大。如果您的数字始终为非负数,则可以,但是如果将Integer.MAX_VALUE与-1进行比较,则会溢出。最好一开始就做正确的事。 (2认同)

Mar*_*ace 34

欢迎Java 8:

Arrays.sort(myArr, (a, b) -> Double.compare(a[0], b[0]));
Run Code Online (Sandbox Code Playgroud)


小智 28

最简单的方法:

Arrays.sort(myArr, (a, b) -> a[0] - b[0]);
Run Code Online (Sandbox Code Playgroud)

  • 我相信由于下溢/溢出问题,这有时会给出错误的结果。 (4认同)

Bor*_*der 7

你需要实现Comparator<Double[]>如下:

public static void main(String[] args) throws IOException {
    final Double[][] doubles = new Double[][]{{5.0, 4.0}, {1.0, 1.0}, {4.0, 6.0}};
    final Comparator<Double[]> arrayComparator = new Comparator<Double[]>() {
        @Override
        public int compare(Double[] o1, Double[] o2) {
            return o1[0].compareTo(o2[0]);
        }
    };
    Arrays.sort(doubles, arrayComparator);
    for (final Double[] arr : doubles) {
        System.out.println(Arrays.toString(arr));
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

[1.0, 1.0]
[4.0, 6.0]
[5.0, 4.0]
Run Code Online (Sandbox Code Playgroud)


小智 7

虽然这是一个旧线程,但这里有两个解决Java8中问题的示例。

按第一列 ([][0]) 排序:

double[][] myArr = new double[mySize][2];
// ...
java.util.Arrays.sort(myArr, java.util.Comparator.comparingDouble(a -> a[0]));
Run Code Online (Sandbox Code Playgroud)

按前两列 ([][0], [][1]) 排序:

double[][] myArr = new double[mySize][2];
// ...
java.util.Arrays.sort(myArr, java.util.Comparator.<double[]>comparingDouble(a -> a[0]).thenComparingDouble(a -> a[1]));
Run Code Online (Sandbox Code Playgroud)


小智 6

您可以使用的二维整数数组的递减/递增顺序:

Arrays.sort(contests, (a, b) -> Integer.compare(b[0],a[0])); //decreasing order
    
Arrays.sort(contests, (a, b) -> Integer.compare(a[0],b[0]); //increasing order
Run Code Online (Sandbox Code Playgroud)


kyx*_*xap 5

简化的 Java 8

IntelliJ 建议简化以下问题的最佳答案:

Arrays.sort(queries, Comparator.comparingDouble(a -> a[0]));
Run Code Online (Sandbox Code Playgroud)


小智 5

这非常简单,您只需记住一些语法即可。

Arrays.sort(contests, (a, b) ->
Integer.compare(a[0],b[0]));//increasing order     ---1

Arrays.sort(contests, (b, a) ->
Integer.compare(b[0],a[0]));//increasing order     ---2

Arrays.sort(contests, (a, b) ->
Integer.compare(b[0],a[0]));//decreasing order     ---3

Arrays.sort(contests, (b, a) ->
Integer.compare(a[0],b[0]));//decreasing order     ---4
Run Code Online (Sandbox Code Playgroud)

如果你仔细观察的话,就会发现是“a”和“b”顺序的改变影响了结果。对于第 1 行,集合是 (a,b) 和 Integer.compare(a[0],b[0]),因此它是递增顺序。现在,如果我们改变其中任何一个中 a 和 b 的顺序,假设 (a,b) 和 Integer.compare(b[0],a[0]) 的集合如第 3 行所示,我们会​​得到降序。