flutter - 如何根据 00:00 格式的时间对列表进行排序/排序?
问题描述
我有这个列表,我想根据时间 ["timein"] 在我的屏幕上对其进行排序。有谁知道我该怎么做?
[{weekday: segunda, description: Química, nametag: Estudos, numbercolortags: [33, 150, 243], timein: 18:30, timeout: 20:00}, {weekday: segunda, description: Física, nametag: Estudos, numbercolortags: [33, 150, 243], timein: 11:00, timeout: 12:00}, {weekday: segunda, description: Biologia, nametag: Estudos, numbercolortags: [33, 150, 243], timein: 22:00, timeout: 23:00}]
解决方案
可能的解决方案:
void main() {
json.sort((x, y) => '${x['time']}'.seconds.compareTo('${y['time']}'.seconds));
for (final element in json) {
print(element);
}
}
final json = [
{'id': 1, 'time': '10:00:01'},
{'id': 3, 'time': '30:00'},
{'id': 2, 'time': '20:00'},
{'id': 4, 'time': '40:00'},
{'id': 0, 'time': '10:00'},
];
extension _Time on String {
int get seconds {
var hours = 0;
var minutes = 0;
var seconds = 0;
final parts = split(':');
switch (parts.length) {
case 2:
minutes = _toInt(parts[0], 59);
seconds = _toInt(parts[1], 59);
break;
case 3:
hours = _toInt(parts[0], 23);
minutes = _toInt(parts[1], 59);
seconds = _toInt(parts[2], 59);
break;
default:
_error();
}
return hours * 3600 + minutes * 60 + seconds;
}
void _error() {
throw FormatException('Invalid time format: $this');
}
int _toInt(String part, int max) {
final result = int.tryParse(part, radix: 10);
if (result == null) {
_error();
}
if (result < 0 || result > max) {
_error();
}
return result;
}
}
结果:
{id: 0, time: 10:00}
{id: 1, time: 10:00:01}
{id: 2, time: 20:00}
{id: 3, time: 30:00}
{id: 4, time: 40:00}
推荐阅读
- java - 过滤具有特殊字符的列族
- php - 提交带有特殊字符的表单时出现 403 禁止错误
- javascript - 页面加载时表单中的随机文本
- struts2 - 使用离子原生高级 http 时会话 Cookie 丢失
- php - preg_replace 使第一个字符大写而不使用像 ucwords() 这样的内置函数
- c++ - 运行搜索数组
- rabbitmq - Rabbitmq 无需重启即可重新加载/刷新新证书
- mongodb - 在特定时间执行多个查询时,我的 MongoDB CPU 使用率变为 100%
- java - Spring boot - Proguard - ant jar 打包:org.springframework.beans.factory.BeanDefinitionStoreException:
- android - 从频道 url 中提取 youtube 频道 ID - android