Flutter中如何为Evento类列表实现多优先级排序功能?
多条件排序实现方案
Dart的sort方法比较器的返回规则为:返回负数代表a排在b前,返回0代表两者优先级相同,返回正数代表b排在a前。多条件排序只需按优先级依次判断,当上一级条件返回0(优先级相等)时,再执行下一级条件判断即可。
完整实现代码如下:
import 'package:intl/intl.dart'; // 复用日期格式化实例,避免重复创建提升排序性能 final dateFormat = DateFormat('d-M-yyyy HH:mm', 'de_DE'); listaBaresFiltrada.sort((a, b) { // 第一优先级:按fechaEvento升序排列 final dateA = dateFormat.parse(a.fechaEvento); final dateB = dateFormat.parse(b.fechaEvento); final dateCompareResult = dateA.compareTo(dateB); if (dateCompareResult != 0) return dateCompareResult; // 第二优先级:menosde30km为true的优先排在前面 final kmCompareResult = (b.menosde30km ? 1 : 0) - (a.menosde30km ? 1 : 0); if (kmCompareResult != 0) return kmCompareResult; // 第三优先级:按distancia升序排列 return a.distancia.compareTo(b.distancia); });
优化建议
如果列表数据量较大,建议提前把Evento类的fechaEvento字段转换为DateTime类型存储,避免排序时重复解析字符串,能大幅提升排序效率。
内容的提问来源于stack exchange,提问作者mvasco
相关产品推荐
相关产品推荐

