flutter - 在飞镖中按工作日排序地图
问题描述
我有一个工作日和时间的地图。但我无法根据工作日对其进行排序,所以星期一先到,然后是下一个。这是我的地图示例。我试过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'
};
解决方案
ASplayTreeMap
确实按键排序,但由于您的键是String
s,因此它会按字母顺序对它们进行排序。如果您可以改为使用DateTime.monday
,DateTime.tuesday
等常量(恰好已经从星期一开始)作为键,那么它将具有您想要的排序顺序。
如果您必须使用String
-based 键,那么您只需要提供一种简单的方法来将String
s 转换为常量并提供适当的比较函数:
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}');
}
}
推荐阅读
- php - url解码和发布数据后出错
- r - 使用自定义函数对 data.table 中的子集使用 mapply
- ios - 如何在swift中按下按钮时从另一个xib文件加载另一个xib文件
- php - 如何通过 PHP 读取特定的 json
- google-cloud-platform - 在谷歌深度学习虚拟机中安装 pip
- ballerina - Ballerina 数据库读取不会引发编译器错误
- jquery - 使用 daterangepicker 获取本月的最后一天
- php - 结合验证日期和未验证数据存储在 laravel 中
- node.js - 如何构建 NodeJs 代码
- node.js - 如何在nodejs中使用'select if'函数和sequelize