1

Javaを使用して全体としてソートする2D配列があります。

さまざまなリンクを見てきました コンパレータを使用して2次元のArrayListをソートする方法。

ただし、常に特定の要素でソートされます。2次元配列全体をソートできるようにしたい。たとえば、

int[][] r = {{1,7,5},{1,3,5},{1,3,6}, {2,3,1}};

並べ替えで私に与える必要があります

{1,2,3},{1,3,5},{1,3,6},{1,5,7}.

ありがとう!

4

3 に答える 3

3

これはあなたのニーズに合っています:

Arrays.sort(array, new Comparator<int[]>() {
    @Override
    public int compare(int[] o1, int[] o2) {
        Arrays.sort(o1);
        Arrays.sort(o2);
        for (int i = 0; i < o1.length && i < o2.length; i++) {
            if (o1[i] != o2[i]) {
                return o1[i] < o2[i] ? -1 : 1;
            }
        }
        if (o1.length != o2.length) {
            return o1.length < o2.length ? -1 : 1;
        }
        return 0;
    }
});
于 2013-01-23T15:23:15.433 に答える
3

これは私がJavaでそれを行う方法です:

private static void sortArray(int[][] array) {
    // Perform initial sorting
    for (int[] subArray : array) {
        Arrays.sort(subArray);
    }

    // Sort each array by its contents (similar to string sorting)
    Arrays.sort(array, new Comparator<int[]>() {
        @Override
        public int compare(int[] o1, int[] o2) {
            int length = Math.min(o1.length, o2.length);
            for (int i = 0; i < length; i++) {
                if (o1[i] > o2[i]) return 1;
                if (o1[i] < o2[i]) return -1;
            }

            // Longer arrays come after shorter arrays, but only if the rest is equal
            if (o1.length > o2.length) return 1;
            if (o1.length < o2.length) return -1;

            return 0;
        }
    });
}

最初のステップでは、2D 配列内のすべての配列を並べ替え、次に 2D 配列内の各配列の内容に基づいて配列全体を並べ替えます。コンパレーターは、大文字と小文字を区別する文字列コンパレーターに期待されるものと同様に機能します。

于 2013-01-23T15:18:16.480 に答える
3

必要なのは、基準に従って 2 つの整数のリストを比較できるカスタム Comparator です。

このコンパレータを使用して並べ替える前に、まずリスト自体を並べ替える必要があります。

于 2013-01-23T15:11:17.027 に答える