我有一个列表,我想在其中根据两个值日期和状态进行排序,如下所示:
pollsList.sort((a, b) => b.active.compareTo(a.active));
pollsList.sort((a, b) {
return b.actualStartDatetime.compareTo(a.actualStartDatetime);
});
Run Code Online (Sandbox Code Playgroud)
其中 active == 90 如果它是活动的,-90 如果不是 ..
我想根据日期然后根据日期对列表进行排序
我希望最新的在顶部,并且总是在活动项目之后关闭
但这将导致列表仅按日期排序
如何按两个值对其进行排序?
lrn*_*lrn 11
您希望对列表进行排序,以便将较晚的开始时间排在较早的开始时间之前,并且如果两个元素具有相同的开始时间,则将活动元素排序在非活动元素之前。
您尝试对列表进行两次排序。这仅在排序算法稳定时才有效,也就是说,如果元素等于wrt。第二次排序比较保持在第一次排序时的顺序。Dart 的排序并不能保证稳定,因此这不是一种安全的方法。即使它看起来有效,也很可能有一个对小列表稳定而不是对大列表稳定的排序算法。
你应该做的是创建一个单一的比较函数,同时进行两个比较。首先比较开始时间。如果这些不相等,您就完成了,否则也比较活动。
pollsList.sort((a, b) {
int cmp = b.actualStartDatetime.compareTo(a.actualStartDatetime);
if (cmp != 0) return cmp;
return b.active.compareTo(a.active);
});
Run Code Online (Sandbox Code Playgroud)
如果您希望将所有非活动元素排在所有活动元素之前,然后按开始时间对这些组中的每一个进行排序,则以相反的顺序进行比较:
pollsList.sort((a, b) {
int cmp = b.active.compareTo(a.active);
if (cmp != 0) return cmp;
return b.actualStartDatetime.compareTo(a.actualStartDatetime);
});
Run Code Online (Sandbox Code Playgroud)
小智 11
我通过将两列合二为一来解决这个问题。“${a.active}${a.actualStartDatetime}”并将其与 b 进行比较。
data.sort((a, b) => ("${a.active}${a.actualStartDatetime}").toString()
.compareTo(("${b.status}${b.actualStartDatetime.toUpperCase()}").toString()));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3605 次 |
| 最近记录: |