如何在 Dart 中按“枚举”对列表进行排序?

Posted

技术标签:

【中文标题】如何在 Dart 中按“枚举”对列表进行排序?【英文标题】:how to sort list by `enum` in Dart? 【发布时间】:2021-05-10 04:31:37 【问题描述】:

如何在 dart 中的 Object 中按 enum 变量对 List<Object> 进行排序?

class Task 
final String name;
final Priority priority;


enum Priority 
first,
second,
third


List<Task> tasks; // <-- how to sort this list by its [Priority]?

【问题讨论】:

您是否必须使用枚举作为优先级?使用整数优先级会更有意义。 @ChristopherMoore 你是对的,但假设我们有一个 List&lt;Restaurant&gt; 并且每个 Restaurant 都有其 Status openbusyclosed 并且我们想要显示打开餐馆起初很忙,然后就关门了,这就是我的情况。 这能回答你的问题吗? Sort a list of objects in Flutter (Dart) by property value 【参考方案1】:

试试这个:

class Task 
  final String name;
  final Priority priority;
  Task(this.name, this.priority);
  @override toString() => "Task($name, $priority)";


enum Priority 
  first,
  second,
  third


extension on Priority 
  int compareTo(Priority other) =>this.index.compareTo(other.index);


List<Task> tasks = [
  Task('zort', Priority.second),
  Task('foo', Priority.first),
  Task('bar', Priority.third),
];

main() 
  tasks.sort((a, b) => a.priority.compareTo(b.priority));
  print(tasks);

假设您的枚举以正确的排序顺序声明。

【讨论】:

您可以在排序回调中使用 a.priority.index,而不需要扩展。 :) 或者,使用 dartx 包,它将 .sortBy 添加到列表中,你可以说tasks.sortBy((e) =&gt; e.priority.index); @RandalSchwartz 哦,当然:D 我试图使优先级可比,但扩展实际上不能做到这一点,不幸的是。并不是说它无论如何都会有很大帮助。只有当 Dart 已经有 sortBy 时才会这样做,所以它看起来很漂亮 tasks.sortBy((t)=&gt;t.priority) 但正如你提到的,你需要一个 lib。

以上是关于如何在 Dart 中按“枚举”对列表进行排序?的主要内容,如果未能解决你的问题,请参考以下文章

如何在VB中按某个组件对对象列表进行排序?

如何在 Dart 中对列表进行排序? [复制]

如何在 Dart 中对字符串列表进行排序?

如何根据 Dart 中的 int 属性对所有 Class 属性进行排序?

如何在android中按数值列对listview项目进行排序

如何在 Linux 命令行中按大小对文件进行排序