flutter 在dart中按工作日对Map排序

bprjcwpo  于 2023-01-06  发布在  Flutter
关注(0)|答案(3)|浏览(216)

我有一个工作日和时间的Map。但是我不能根据工作日排序,所以星期一排在第一位,然后是下一个。这是我的Map示例。我尝试了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'
  };
yjghlzjz

yjghlzjz1#

SplayTreeMap确实按键排序,但是因为你的键是String s,它会按字母顺序排序,如果你可以使用DateTime.mondayDateTime.tuesday等常量(碰巧已经从Monday开始)作为键,那么它会有你想要的排序顺序。
如果你必须使用基于String的键,那么你只需要提供一个简单的方法来将String转换成常量,并提供一个合适的比较函数:

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}');
  }
}
tag5nh1u

tag5nh1u2#

我决定从这个问题中寻找乐趣,并使用可迭代函数解决了这个问题。

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'
};

enum Day { sun, mon, tue, wed, thu, fri, sat }

extension DayX on Day {
  String stringify() {
    final clean = toString().substring(toString().indexOf('.') + 1);
    return '${clean[0].toUpperCase()}${clean.substring(1)}';
  }
}

void main() {
  final sorted = Day.values.map((day) => onlineVideoAppointment.entries.firstWhere((entry) => entry.key == day.stringify()));
  
  final sortedMap = Map<String, dynamic>.fromIterable(sorted, key: (appt) => appt.key, value: (appt) => appt.value);
  
  print(sortedMap);
}
fd3cxomn

fd3cxomn3#

对于在这种情况下仍然需要帮助的任何人,请尝试手动为天分配数字,并按您分配数字的字段对它们进行排序。

相关问题