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

Comparator を 2 番目の引数として取るOverloaded Arrays#Sort(T[] a, Comparator c)を使用します。

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:大きな比較演算子の代わりに、ラムダ関数を次のように使用できます-

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 に答える
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 で問題を解決するための例を 2 つ示します。

最初の列 ([][0]) による並べ替え:

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

最初の 2 列 ([][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 に答える
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 に答える
-1

一般的な解決策として、 Column Comparatorを使用できます。クラスを使用するコードは次のようになります。

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