2

次のコードでは、2 次元配列をソートしようとしています

 int[][] d2 = {
           {4,5,1},
           {4,1,1},
           {1,7,1},
           {3,3,2},
           {1}
          };

        java.util.Arrays.sort(d2, new java.util.Comparator<int[]>() {
            public int compare(int[] a, int[] b) {
                return a[0] - b[0];
            }
        });

ソート後に配列を表示します

for (int r=0; r<d2.length; r++) {
            for (int c=0; c<d2[r].length; c++) {
                System.out.print(" " + d2[r][c]);
            }
            System.out.println("");
}

私が得る結果はこのようなものです

 1 7 1
 1
 3 3 2
 4 5 1
 4 1 1

私は結果2がこのようになることを望みます

 1
 1 7 1
 3 3 2
 4 5 1
 4 1 1

上記のように配列をソートするには、何が必要ですか?

を に置き換えてみました{1}{1,0,0}、 に対しても同じ結果が得られ{1,0,1}ます。

4

2 に答える 2

4

compareメソッドで渡された配列の長さを比較します。長さa[]が 未満の場合b[]、-1 を返します: -

    java.util.Arrays.sort(d2, new java.util.Comparator<int[]>() {
                public int compare(int[] a, int[] b) {
                    if (a.length != b.length) {
                        return a.length < b.length ? -1 : 1;
                    }
                    return a[0] - b[0];
                }
            });

各要素をチェックして並べ替えたい場合は、この方法で行う必要があると思います..compareメソッドを次のように変更します。

public int compare(int[] a, int[] b) {

    if (a.length == b.length) {
        for (int i = 0; i < a.length; i++) {
            if (a[i] == b[i]) {

            } else {
                return a[i] - b[i];
            }
        }
        return 0;

    } else {
        return a.length < b.length ? -1 : 1;
    }                       
}
于 2012-10-09T11:24:54.723 に答える
0

あなたComperatorは最初のフィールドのみを使用して2つの配列を比較します。すべてのフィールドを含めて比較するか、少なくとも配列の長さを確認して目的の結果を得る必要があります。

于 2012-10-09T11:27:36.220 に答える