如何在Dart中按指定自定义顺序对Place对象列表按PlaceType排序
最优实现方案
根据你的场景,推荐两种高可维护性的实现方式,可按需选择:
方案1:枚举扩展固定优先级(推荐,性能最优)
适合优先级规则固定的场景,直接给PlaceType扩展优先级权重属性,后续调整排序顺序只要修改权重值即可:
// 给PlaceType扩展优先级属性,数值越小排序越靠前 extension PlaceTypePriority on PlaceType { int get priority { switch (this) { case PlaceType.supermarket: return 0; case PlaceType.cinema: return 1; case PlaceType.museum: return 2; } } } // 排序逻辑只需要对比priority即可 placesList.sort( (Place a, Place b) => a.type.priority.compareTo(b.type.priority), );
注:你的原代码中使用的placeType属性和定义的Place类属性type不一致,注意修正为实际的属性名
方案2:动态优先级列表(灵活适配可变规则)
如果排序规则需要经常动态调整,不需要修改枚举扩展,直接传入优先级列表即可:
// 可随时调整的优先级顺序列表 final priorityOrder = [PlaceType.supermarket, PlaceType.cinema, PlaceType.museum]; placesList.sort( (Place a, Place b) => priorityOrder.indexOf(a.type).compareTo(priorityOrder.indexOf(b.type)), );
这种方式性能稍低于方案1(需要遍历列表拿索引),但对于枚举值数量不多的场景完全可以忽略性能差异。
你原有的代码是按枚举值的name字段做字典序排序,默认顺序为cinema > museum > supermarket,和你需要的顺序相反,因此不符合需求。
内容的提问来源于stack exchange,提问作者Yoann Far
相关产品推荐
相关产品推荐

