【问题标题】:how can you sort 2 dimensional String array?如何对二维字符串数组进行排序?
【发布时间】:2014-05-21 17:47:11
【问题描述】:

如何排序

String  [][] Array11= {{array[i]},{array2[i]},{array3[i]}};

关于我想要做什么的简要说明: 数组包含学生证号 array2 包含学生姓名 array3 包含学生课程。 它们都是字符串数组

如果我输入:

1:

身份证号码:5 姓名:A 课程:计算机科学

2:

身份证号码:3 姓名:乙 课程:IT

我应该按它的 ID 号对其进行排序,这样输出就会像这样

身份证号码姓名课程 3 B IT 5 A CS

或者如果您对如何使其工作有任何其他建议,请帮助我。 :)

【问题讨论】:

  • 将数据存储在二维数组中是否有原因?鉴于行看起来是不同的数据,将这些数据存储在实际对象中然后拥有您创建的对象的数组会更有意义。通过将数据存储在二维数组中,您会混淆它包含的实际数据。

标签: java arrays sorting multidimensional-array comparator


【解决方案1】:

您应该用Students 的一维数组替换您的二维字符串数组,在其中创建一个具有“id”、“name”和“course”属性的Student 类。

然后创建一个实现Comparator<Student> 的类,比如StudentComparator。它的compare 方法应该返回一个负数0 或一个正数,这取决于第一个Student 与第二个Student 的比较是小于、等于还是大于。

【讨论】:

    【解决方案2】:

    您存储数据的方式不合适。我建议您为实现 Comparable 的学生定义一个类。然后覆盖 compareTo() 函数,使其按课程 ID 进行比较

     public class Student implements Comparable<Student >
     {
      public  int id;
      public  String name;
      public  String course;
    
      public int compareTo(Student s)
      {
         if(s ==null)
           return 1;
    
        return id - s.id;
      }
    
     }
    

    现在您可以将所有学生存储在 ArrayList 中,如下所示:

    Student [] studentsList = new Student [sizeOfStudent];
    

    现在您可以使用 Arrays 实用排序方法进行排序:

    Arrays.sort(studentsList);
    

    注意:如果您想使用不同的数据结构,那么我建议使用 ArrayList 而不是 Array。

    【讨论】:

      【解决方案3】:

      做到这一点的最佳方法是停止假装您正在使用 C 并开始实际使用 Java。

      第 1 步:创建一个包含学生 ID、学生姓名和学生课程的对象。

      第 2 步:将这些对象存储在有意义的集合(数组、列表、其他)中。

      第 3 步;对集合进行排序。

      这里有一些代码:

      public class StudentBlam implements Comparable<StudentBlam>
      {
          private final String course;
          private final String id;
          private final String name;
      
          public StudentBlam(
              final String course,
              final String id,
              final String name)
          {
              this.course = course;
              this.id = id;
              this.name = name;
          }
      
          @Override
          public int compareTo(final StudentBlam other)
          {
              return id.compareTo(other.getId());
          }
      
          public String getCourse()
          {
              return course;
          }
      
          public String getId()
          {
              return id;
          }
      
          public String getName()
          {
              return name;
          }
      }
      

      【讨论】:

        【解决方案4】:

        您需要创建一个自定义Comparator

        查看Column Comparator,它提供了两种方法:

        1. 创建自定义比较器以按给定索引对数组进行排序
        2. 只需指定要排序的列的索引,即可将ColumnComparator 用作可重复使用的比较器。

        或者更好的设计是创建一个自定义的学生对象来存储学生的属性(Id、Name、Course),然后您可以使用Bean Comparator,对类中的任何属性进行排序。

        【讨论】:

          猜你喜欢
          • 2023-01-02
          • 2013-07-19
          • 2011-07-01
          • 2021-08-16
          • 2014-08-10
          • 2013-05-26
          • 2011-02-17
          • 1970-01-01
          相关资源
          最近更新 更多