如何将List<Map<String, dynamic>>按字符串类型Datetime降序排序?
如何将字符串类型日期的Map列表按降序排序?
针对你给出的_allUsers列表,其中"Clock-In"字段是YYYY-MM-DD HH:MM:SS格式的日期字符串,这里提供两种可靠的排序方案:
方法1:直接比较字符串(高效简洁)
由于你的日期字符串是标准的年-月-日 时:分:秒格式,字符串的字典序和时间顺序完全匹配,因此可以直接通过字符串对比实现排序。注意原列表是final不可变状态,需要先创建副本再操作:
// 创建原列表的副本,避免修改原始数据 List<Map<String, dynamic>> sortedUsers = List.from(_allUsers); // 按"Clock-In"字段降序排序 sortedUsers.sort((a, b) { return b["Clock-In"].compareTo(a["Clock-In"]); });
方法2:转换为DateTime对象比较(更健壮)
如果需要兼容可能存在的不规范日期格式,建议先将字符串解析为DateTime对象再比较,同时可以处理解析失败的异常情况:
List<Map<String, dynamic>> sortedUsers = List.from(_allUsers); sortedUsers.sort((a, b) { // 尝试解析日期字符串,失败则返回null DateTime? dateA = DateTime.tryParse(a["Clock-In"]); DateTime? dateB = DateTime.tryParse(b["Clock-In"]); // 处理解析失败的条目:将无效日期放到列表末尾 if (dateA == null) return 1; if (dateB == null) return -1; // 降序排序,用b的日期对比a的日期 return dateB.compareTo(dateA); });
排序结果验证
排序后列表的前几项顺序应为:
- Chan Saw Lin(2020-08-23 11:59:05)
- Jayden Lee(2020-08-22 08:10:38)
- Lim Kok Lin(2020-08-19 11:11:35)
- Khaw Tong Lin(2020-08-19 11:10:18)
内容的提问来源于stack exchange,提问作者JEFRI LUQMAN HAKIM JUNAIDE
相关产品推荐
相关产品推荐

