【问题标题】:Link two arrays and sort them together链接两个数组并将它们排序在一起
【发布时间】:2013-09-23 08:28:00
【问题描述】:

我有两个数组,一个是 String[],另一个是 int[]。整数数组中的值对应于字符串数组的元素。 例如,String 数组包含一些球队的名称,另一个 int 数组包含他们在联赛中的积分。 我可以使用 Arrays.sort 对 int 数组进行排序,我想根据分数对 String 数组进行排序,如果两个团队的分数相同,我应该按字母顺序排列。

我想我可以制作一个二维数组,但是如何排序呢?

【问题讨论】:

  • 你需要一个类 - Teamnamepoint 作为属性。互联网上有很多这样的例子,还有 SO 本身。请自行搜索。
  • 这取决于域。如果团队存在于这些结果之外,那么您需要一个 Team 类和 TeamResults 类。
  • 您可以改用 Map 并按照此处所述对其进行排序:stackoverflow.com/questions/109383/…

标签: java arrays sorting multidimensional-array


【解决方案1】:

考虑创建一个类:

class Team {
   String name;
   int numPoints;
}

并且有一个数组 Team[] teams 。然后,您可以为这些对象创建一个比较器,根据 StringInteger 标准进行排序。

【讨论】:

    【解决方案2】:

    如果您创建了一个包含团队的两个值的类,并让该类实现 Comparable 接口,那么您将很容易做到这一点。然后使用 Arrays.sort 对这些对象的数组进行排序就很简单了。

    【讨论】:

      【解决方案3】:

      创建一个类并添加两个比较器:

      class Team{
         private String teamName;
         private int leaguePoints;
         public static final Comparator<Team> BY_NAME = new ByName();
         public static final Comparator<Team> BY_POINTS = new ByPoints();
         private static class ByName implements Comparator<Team>
         {
             public int compare(Team a, Team b)
               return a.name.compareTo(b.name); 
         }
         private static class ByPoints implements Comparator<Team>
         {
            public int compare(Team a, Team b)
               return a.leaguePoints - b.leaguePoints;
         }
      }
      

      然后对这个类的数组进行排序,首先使用BY_NAME 比较器,然后使用BY_POINTS

      Arrays.sort(array, Team.BY_NAME);
      Arrays.sort(array, Team.BY_POINTS);
      

      确保使用稳定排序来保留相等键的相对顺序(即如果点数相等,那么像选择排序这样的不稳定排序可能会弄乱团队名称的排序顺序)。

      【讨论】:

        猜你喜欢
        • 2022-06-13
        • 2013-11-05
        • 2011-10-25
        • 2019-12-19
        • 1970-01-01
        • 1970-01-01
        • 2023-03-18
        • 2021-07-15
        • 1970-01-01
        相关资源
        最近更新 更多