You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter sorted函数排序异常,请求排查问题原因

问题分析与解决:Dart列表按时间戳排序失败

你的排序代码出问题的核心是运算符优先级搞错了,导致逻辑完全偏离预期。

问题根源

Dart里??(空值合并运算符)的优先级比compareTo方法调用低,所以你写的代码实际执行顺序是这样的:

a.fixtureDetails?.timestamp ?? (0.compareTo(b.fixtureDetails?.timestamp ?? 0))

也就是说,只有当a的时间戳为null时,才会去计算0和b时间戳的比较值;如果a的时间戳不为null,就直接用这个值作为排序的返回结果,根本没和b的时间戳做比较——这显然不是你想要的按时间戳排序的逻辑,所以结果才会混乱。

修正后的代码

给空值合并的部分加上括号,确保先把null的时间戳替换成0,再调用compareTo做比较:

var sortedFixtures = fixtures.sorted((a, b) =>
    (a.fixtureDetails?.timestamp ?? 0).compareTo(b.fixtureDetails?.timestamp ?? 0));

修正后的预期排序

按时间戳从小到大排列的话,你的数据应该是:
Arsenal(1664623800) → Southampton/Liverpool/Fulham/Crystal Palace/Bournemouth(1664632800) → West Ham(1664641800) → Manchester City(1664715600) → Leeds(1664724600) → Leicester(1664823600)

内容的提问来源于stack exchange,提问作者alfietap

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 06:45:37