需要帮助按第二个元素排序二维数组,然后按第一个元素排序(Java)
我有一个二维数组,里面有5张牌的值。5个数组中的每个数组的第一个元素表示卡的套装,第二个元素表示卡的价值
我想按第二个元素对2d数组排序,然后按第一个元素排序,同时保持第二个元素的排序顺序(如果有意义的话)。例如,在已排序的列表中,一人的所有套装将低于两人的所有套装。例如,{0,1},{2,1},{0,2}}应该变成{0,1},{2,1},{0,2}
以下是我所拥有的:
// {{3,2}, {2,2}, {0,1}, {1,0}, {2,3}} should become
// {{1,0}, {0,1}, {2,2}, {3,2}, {2,3}}
int[][] hand = {{3,2},{2,2},{0,1},{1,0},{2,3}};
sort(hand);
public static void sort(int[][] hand){
Arrays.sort(hand, new Comparator<int[]>(){
public int compare(int[] o1, int[] o2){
return Integer.valueOf(o1[1]).compareTo(Integer.valueOf(o2[1]));
}
});
}
这是输出{1,0},{0,1},{3,2},{2,2},{2,3}。有人有什么建议吗
# 1 楼答案
这对你有用吗:
# 2 楼答案
解决方案1:按第二个元素对数组排序,然后按第一个元素对数组排序。因为
Arrays.sort
是稳定的,这相当于首先通过第一个元素进行比较,然后通过第二个元素进行比较解决方案2:按如下方式修改比较器:
或者,对于番石榴(披露:我为番石榴做了贡献),您可以将比较指标写为
# 3 楼答案
您可以这样更紧凑地使用Java8 Comparator
# 4 楼答案
我将添加一个Java8解决方案,以防有人想知道
基本上,当第二个元素相等时,它会比较每个数组的第一个元素,否则直接比较第二个元素