gpt4 book ai didi

java - 需要帮助按第二个元素然后按第一个元素对二维数组进行排序(Java)

转载 作者:太空宇宙 更新时间:2023-11-04 08:16:29 28 4
gpt4 key购买 nike

我有一个二维数组,其中包含 5 张卡片的值。 5个数组中的每一个的第一个元素代表牌的花色,第二个元素代表牌的值。

我想按第二个元素对二维数组进行排序,然后按第一个元素进行排序,同时保持第二个元素的排序顺序(如果有意义的话)。例如,所有 1 的花色在排序列表中将低于所有 2 的花色。例如,{{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:按第二个元素对数组进行排序,然后按第一个元素对数组进行排序。由于 Arrays.sort 是稳定的,这相当于先比较第一个元素,然后比较第二个元素。

解决方案 2:按如下方式修改比较器:

Arrays.sort(hand, new Comparator<int[]>() {
public int compare(int[] o1, int[] o2) {
if (o1[0] == o2[0]) {
return Integer.compare(o1[1], o2[1]);
} else {
return Integer.compare(o1[0], o2[0]);
}
}
});

或者,使用 Guava(披露:我为 Guava 做出贡献),您可以将比较器写为

  public int compare(int[] o1, int[] o2) {
return ComparisonChain.start()
.compare(o1[0], o2[0])
.compare(o1[1], o2[1])
.result();
}

关于java - 需要帮助按第二个元素然后按第一个元素对二维数组进行排序(Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10321123/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com