87

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

double[][] myArr = new double[mySize][2];

例如,myArr 内容是:

1      5
13     1.55
12     100.6
12.1   .85

我希望它达到:

1      5
12     100.6
12.1   .85
13     1.55

我希望在不必实现自己的排序的情况下做到这一点。

4

14 回答 14

131

使用 Overloaded Arrays#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]);
    }
});

JAVA-8:我们可以使用 lambda 函数来代替那个大比较器,如下所示

Arrays.sort(array, Comparator.comparingDouble(o -> o[0]));
于 2013-03-16T17:38:46.130 回答
83

欢迎使用 Java 8:

Arrays.sort(myArr, (a, b) -> Double.compare(a[0], b[0]));
于 2016-10-09T22:32:57.053 回答
38

最简单的方法:

Arrays.sort(myArr, (a, b) -> a[0] - b[0]);
于 2019-09-17T13:11:43.593 回答
8

你需要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));
    }
}

输出:

[1.0, 1.0]
[4.0, 6.0]
[5.0, 4.0]
于 2013-03-16T17:42:47.263 回答
8

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

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

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

按前两列排序 ([][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]));
于 2016-06-23T11:32:04.723 回答
7

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

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
于 2020-05-01T05:46:31.103 回答
4

简化的 Java 8

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

Arrays.sort(queries, Comparator.comparingDouble(a -> a[0]));
于 2018-08-29T17:13:30.553 回答
3

要按降序排序,您可以翻转两个参数

int[][] array= {
    {1, 5},
    {13, 1},
    {12, 100},
    {12, 85} 
};
Arrays.sort(array, (b, a) -> Integer.compare(a[0], b[0]));

输出:

13, 5
12, 100
12, 85
1, 5
于 2021-01-22T08:17:04.430 回答
2

这真的很简单,你只需要记住一些语法。

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

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

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

Arrays.sort(contests, (b, a) -> Integer.compare(a[0],b[0]));//降序---4

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

于 2021-02-01T16:08:20.573 回答
1

更简单的代码:

导入 java.util.Arrays;int[][] 数组 = 新的 int[][];

Arrays.sort(array, (a, b) -> a[1] - b[1]);

于 2020-09-22T00:07:42.327 回答
0
import java.util.*;

public class Arrays2
{
    public static void main(String[] args)
    {
        int small, row = 0, col = 0, z;
        int[][] array = new int[5][5];

        Random rand = new Random();
        for(int i = 0; i < array.length; i++)
        {
            for(int j = 0; j < array[i].length; j++)
            {
                array[i][j] = rand.nextInt(100);
                System.out.print(array[i][j] + " ");
            }
            System.out.println();
        }

        System.out.println("\n");


        for(int k = 0; k < array.length; k++)
        {
            for(int p = 0; p < array[k].length; p++)
            {
                small = array[k][p];
                for(int i = k; i < array.length; i++)
                {
                    if(i == k)
                        z = p + 1;
                    else
                        z = 0;
                    for(;z < array[i].length; z++)
                    {
                        if(array[i][z] <= small)
                        {
                            small = array[i][z];
                            row = i;
                            col = z;
                        }
                    }
                }
            array[row][col] = array[k][p];
            array[k][p] = small;
            System.out.print(array[k][p] + " ");
            }
            System.out.println();
        }
    }
}

祝你好运

于 2015-12-14T11:58:18.050 回答
0

Java 8 现在非常普遍。

Arrays.sort(myArr,(double[] a,double[] b)->{
                //here multiple lines of code can be placed
                return a[0]-b[0]; 
            });
于 2020-04-11T12:14:58.493 回答
0

你可以使用自己的排序,很简单。

int[][] matrix = {
            {2, 1, 3},
            {5, 4, 6},
            {8, 7, 9}
        };

for (int k = 0; k < length; k++) {
        for (int i= 0; i < matrix[k].length; i++) {
            for (int j = 0; j < matrix[k].length; j++) {
                if (matrix[k][i] < matrix[k][j]) {
                    int temp = matrix[k][i];
                    matrix[k][i] = matrix[k][j];
                    matrix[k][j] = temp;
                }
            }
        }
    }

System.out.println(Arrays.deepToString(matrix));

输出

[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
于 2021-12-17T18:07:58.487 回答
-1

对于一般解决方案,您可以使用Column Comparator。使用该类的代码是:

Arrays.sort(myArr, new ColumnComparator(0));
于 2013-03-16T19:10:11.140 回答