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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 13:15:03