dart 如何在flutter中按升序对星期名称列表进行排序

ewm0tg9j  于 2022-12-15  发布在  Flutter
关注(0)|答案(3)|浏览(144)

我有一个随机排列的星期几名称列表,如何按升序排序,例如星期一,星期二,星期三...
列表

[Friday, Monday, Sunday, Wednesday]

所需列表

[Monday, Wednesday, Friday, Sunday]

我试过了

list.sort((a, b) => a.toLowerCase().compareTo(b.toLowerCase()));
nkoocmlb

nkoocmlb1#

你要克服的问题是没有一个超级简单的方法来获得一周中的每一天的列表,然而,如果你只需要处理英语,这实际上并不是一个困难的问题-你可以硬编码它。
下面是一个例子:

const weekDays = [
  "Monday",
  "Tuesday",
  "Wednesday",
  "Thursday",
  "Friday",
  "Saturday",
  "Sunday"
];

final positions = weekDays.asMap().map((ind, day) => MapEntry(day, ind));

位置稍微有趣一点;通过调用asMap,我将列表转换为一个Map,键是位置(即0:“Monday”,... 6:“Friday”),然后交换它们,这将比只使用indexOf的查找速度快一些,尽管在这种情况下实际上可能是不必要的优化。
然后,要进行排序,只需使用列表的sort方法,并向其传递一个自定义比较器函数:

dates.sort((first, second) {
  final firstPos = positions[first] ?? 7;
  final secondPos = positions[second] ?? 7;
  return firstPos.compareTo(secondPos);
});

把所有这些放在一起,它看起来是这样的:

const weekDays = [
  "Monday",
  "Tuesday",
  "Wednesday",
  "Thursday",
  "Friday",
  "Saturday",
  "Sunday"
];

final positions = weekDays.asMap().map((ind, day) => MapEntry(day, ind));

void main() {
  final dates = ["Friday", "Monday", "Sunday", "Banana", "Wednesday"];

  dates.sort((first, second) {
    final firstPos = positions[first] ?? 8;
    final secondPos = positions[second] ?? 8;
    return firstPos.compareTo(secondPos);
  });
  
  print("sorted: $dates");
}

请注意,如果您的数据没有完全净化,您可能希望将其规范化为全部小写,并对“weekDays”列表执行相同的操作。

2w2cym1i

2w2cym1i2#

要对日期列表进行排序,使其从Sunday开始按升序排列,可以使用List类中的sort方法,并指定一个自定义Comparator函数,该函数根据日期在列表中的索引来比较日期。
https://gist.github.com/tanmoy27112000/f0077c593dd883d93a338261fd9a96a5
这将比较给定dayList中提供的日期,并给出所需的排序列表。
sortedDays也可以修改为根据您的喜好对给定列表进行排序。

csga3l58

csga3l583#

可以添加值为ex的Map数据
const map = { 'Monday': 1, 'Tuesday': 2, 'Wednesday': 3, 'Thursday': 4, 'Friday': 5, 'Saturday': 6, 'Sunday': 7 };,然后可以Map值并对其进行排序。或者,您可以在下面的问题中看到link

相关问题