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
相关产品推荐
相关产品推荐

