如何基于两个值对列表进行排序

问题描述 投票:0回答:1

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

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

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

如果激活== 90,如果它是活动的,如果不是,则为-90。

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

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

但这会导致列表仅按日期排序

如何按两个值对其进行排序?

dart flutter
1个回答
1
投票

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

您尝试的是对列表进行两次排序。这只有在排序算法稳定的情况下才有效,也就是说,如果元素与wrt相等。第二种排序比较保持按第一种排序顺序排列。 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);
});
© www.soinside.com 2019 - 2024. All rights reserved.