gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 07:20:34 24 4
gpt4 key购买 nike

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

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

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

其中 active == 90 如果它处于事件状态,-90 如果它不是。

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

我希望最新的在顶部,并且总是在事件项目之后关闭。

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

最佳答案

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

您尝试对列表进行两次排序。这只有在排序算法稳定时才有效,也就是说,如果元素相等。第二种排序比较保持第一种排序的顺序。 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);
});

关于dart - 如何根据两个值对列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55920677/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com