使用我的以下代码,我尝试对二维数组进行排序
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
我希望结果二是这样的
1
1 7 1
3 3 2
4 5 1
4 1 1
要使数组按上述方式排序需要做什么?
我尝试用{1}
替换{1,0,0}
,但即使对{1,0,1}
也是如此。
答案 0 :(得分: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;
}
}
答案 1 :(得分:0)
在Comperator
中,您只使用第一个字段来比较2个数组。您必须包含所有字段以进行比较,或者至少必须检查数组的长度以获得所需的结果。