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

Flutter中按指定枚举列表排序的最优实现方法

按指定枚举列表顺序排序目标列表的简洁实现

核心思路

先基于有序枚举列表(列表A)建立值到索引的映射字典,利用字典O(1)的查找效率,再对目标列表(列表B)过滤空值后,按映射的索引值排序,就能完美贴合列表A的顺序。

Python 实现示例

假设你的枚举列表和目标列表如下:

# 枚举全量有序列表
list_a = ["状态A", "状态B", "状态C", "状态D"]
# 包含空值、乱序的目标列表
list_b = ["状态C", None, "状态A", "状态B", "状态D", None]

简洁实现代码:

# 构建值与索引的映射
value_index_map = {val: idx for idx, val in enumerate(list_a)}

# 过滤空值并按列表A的顺序排序
sorted_list_b = sorted(
    filter(lambda x: x is not None, list_b),
    key=lambda x: value_index_map[x]
)

# 输出结果:['状态A', '状态B', '状态C', '状态D']
print(sorted_list_b)

JavaScript 实现示例

const listA = ["状态A", "状态B", "状态C", "状态D"];
const listB = ["状态C", null, "状态A", "状态B", "状态D", null];

// 构建值到索引的映射
const valueIndexMap = new Map(listA.map((val, idx) => [val, idx]));

// 过滤空值并排序
const sortedListB = listB
  .filter(val => val !== null)
  .sort((a, b) => valueIndexMap.get(a) - valueIndexMap.get(b));

// 输出结果:['状态A', '状态B', '状态C', '状态D']
console.log(sortedListB);

方案优势

  • 避免了反复调用list_a.index()的低效操作(index()是O(n)时间复杂度,字典查找是O(1))
  • 逻辑拆分清晰:先过滤无效值,再按预设规则排序,可读性拉满
  • 完全贴合需求:自动跳过缺失值,严格保留列表A的原有顺序

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 15:52:38