如何根据两个值对列表进行排序

2024-04-12

我有一个列表,我想根据两个值日期和状态进行排序,如下所示:

pollsList.sort((a, b) => b.active.compareTo(a.active));

  pollsList.sort((a, b) {
    return b.actualStartDatetime.compareTo(a.actualStartDatetime);
  });

其中,如果处于活动状态,则 active == 90;如果不处于活动状态,则为 -90。

我想根据日期对列表进行排序,然后根据日期进行排序。

我希望最新的项目位于顶部,并且关闭的项目始终位于活动项目之后。

但这将导致列表仅按日期排序。如何按这两个值对其进行排序?


您希望对列表进行排序,以便较晚的开始时间排在较早的开始时间之前,并且如果两个元素具有相同的开始时间,则将活动元素排序在非活动元素之前。

您尝试的是将列表排序两次。仅当排序算法为stable,即如果元素相等。第二次排序比较保持第一次排序的顺序。 Dart 的排序不保证稳定,因此这不是一种安全的方法。即使它看起来有效,也很可能有一种对小列表稳定但对大列表不稳定的排序算法。

相反,您应该做的是创建一个同时进行两个比较的比较函数。首先比较开始时间。如果这些不相等,则您已完成,否则也比较活动。

pollsList.sort((a, b) {
  int cmp = b.actualStartDatetime.compareTo(a.actualStartDatetime);
  if (cmp != 0) return cmp;
  return b.active.compareTo(a.active);
});

如果您希望将所有非活动元素排序在所有活动元素之前,然后按开始时间对每个组进行排序,则可以按相反的顺序进行比较:

pollsList.sort((a, b) {
  int cmp = b.active.compareTo(a.active);
  if (cmp != 0) return cmp;
  return b.actualStartDatetime.compareTo(a.actualStartDatetime);
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何根据两个值对列表进行排序 的相关文章

随机推荐