Dart / Flutter按多个字段排序列表

fcg9iug3  于 2022-12-16  发布在  Flutter
关注(0)|答案(1)|浏览(250)

我正在写我的问题,但在发布之前已经找到了解决方案。关于如何在Dart中通过比较两个字段对列表进行排序,有很多例子。但是,我仍然发现,至少对我来说,要弄清楚通过两个以上字段进行排序并不容易。我认为值得在一个单独的主题下分享它。

xv8emn3q

xv8emn3q1#

下面是我如何在Dart中按三个或更多字段对列表进行排序:

class Student {
  String name;
  String course;
  int age;

  Student(this.name, this.course, this.age);
  
  @override
  String toString() {
    return '{$name, $course, $age}';
  }
}

main() {
  List<Student> students = [];
  students.add(Student('Katherin', 'Dart Potions', 21));
  students.add(Student('Adam Sr', 'Dart Magic', 40));
  students.add(Student('Adam Jr', 'Dart Magic', 15));

  students.sort(
    (a, b) {
      final int sortByCourse = -a.course.compareTo(b.course); // the minus '-' for descending
      if (sortByCourse == 0) {
        final int sortByName = a.name.compareTo(b.name);
        if (sortByName == 0) {
          return a.age.compareTo(b.age);
        }
        return sortByName;
      }
      return sortByCourse;
    },
  );
  
  print('Sort DESC by Course, then ASC by Name and then ASC by Age:\n ${students.toString()}');
}

相关问题