首页 > 解决方案 > 在飞镖中按工作日排序地图

问题描述

我有一个工作日和时间的地图。但我无法根据工作日对其进行排序,所以星期一先到,然后是下一个。这是我的地图示例。我试过SplayTreeMap但我无法让它工作。

  Map<String, dynamic> onlineVideoAppointment = {
  'Mon': '12:00 AM-12:30 AM',
  'Wed': '12:15 AM-1:15 AM',
  'Sun': '12:00 AM-1:00 AM',
  'Thu': '12:30 AM-1:30 AM',
  'Tue': '12:15 AM-1:15 AM',
  'Fri': '12:30 AM-1:00 AM',
  'Sat': '12:00 AM-12:30 AM'
  };

标签: fluttersortingdartmaps

解决方案


ASplayTreeMap确实按键排序,但由于您的键是Strings,因此它会按字母顺序对它们进行排序。如果您可以改为使用DateTime.monday,DateTime.tuesday等常量(恰好已经从星期一开始)作为键,那么它将具有您想要的排序顺序。

如果您必须使用String-based 键,那么您只需要提供一种简单的方法来将Strings 转换为常量并提供适当的比较函数:

import 'dart:collection';

Map<String, String> onlineVideoAppointment = {
  'Mon': '12:00 AM-12:30 AM',
  'Wed': '12:15 AM-1:15 AM',
  'Sun': '12:00 AM-1:00 AM',
  'Thu': '12:30 AM-1:30 AM',
  'Tue': '12:15 AM-1:15 AM',
  'Fri': '12:30 AM-1:00 AM',
  'Sat': '12:00 AM-12:30 AM'
};

const dayAbbreviationToValue = {
  'Mon': DateTime.monday,
  'Tue': DateTime.tuesday,
  'Wed': DateTime.wednesday,
  'Thu': DateTime.thursday,
  'Fri': DateTime.friday,
  'Sat': DateTime.saturday,
  'Sun': DateTime.sunday,
};

void main() {
  var sortedMap = SplayTreeMap.of(
      onlineVideoAppointment,
      (key1, key2) => dayAbbreviationToValue[key1]!
          .compareTo(dayAbbreviationToValue[key2]!));

  for (var entry in sortedMap.entries) {
    print('${entry.key}: ${entry.value}');
  }
}

推荐阅读