如何基于多优先级参考数组对JavaScript目标字符串数组排序
按多参考数组优先级排序目标数组的实现方法
问题背景
现有三个定义排序规则的参考数组:
arr1 = ['ab', 'bc', 'ca', 'ac'] arr2 = ['lm', 'mn', 'ml'] arr3 = ['ij', 'kj', 'pr']
需对目标数组myArray按arr1 > arr2 > arr3的优先级排序,目标数组中每个字符串的前2位匹配arr1元素,中间2位匹配arr2元素,最后2位匹配arr3元素:
myArray = ['acmnkj', 'bcmlij', 'camnij', 'bcmnij']
期望排序结果:['bcmnij', 'bcmlij', 'camnij', 'acmnkj']
实现思路
核心逻辑是将每个参考数组的元素映射为对应的索引(索引越小优先级越高),然后为目标数组的每个字符串生成一个排序三元组:(前2位在arr1的索引, 中间2位在arr2的索引, 最后2位在arr3的索引),利用sorted函数按三元组升序排列即可满足优先级要求。
代码实现
# 定义参考数组 arr1 = ['ab', 'bc', 'ca', 'ac'] arr2 = ['lm', 'mn', 'ml'] arr3 = ['ij', 'kj', 'pr'] # 创建元素到索引的映射字典,提升查询效率 rank_map1 = {item: idx for idx, item in enumerate(arr1)} rank_map2 = {item: idx for idx, item in enumerate(arr2)} rank_map3 = {item: idx for idx, item in enumerate(arr3)} # 目标数组 myArray = ['acmnkj', 'bcmlij', 'camnij', 'bcmnij'] # 按优先级排序 sorted_result = sorted(myArray, key=lambda s: ( rank_map1[s[:2]], # 优先级1:前2位对应arr1的索引 rank_map2[s[2:4]], # 优先级2:中间2位对应arr2的索引 rank_map3[s[4:]] # 优先级3:最后2位对应arr3的索引 )) print(sorted_result) # 输出:['bcmnij', 'bcmlij', 'camnij', 'acmnkj']
关键说明
- 映射字典的优势:使用字典存储元素与索引的对应关系,查询效率为O(1),远高于直接调用
arr.index(item)的O(n)遍历查询,适合参考数组较大的场景。 - 排序三元组的作用:Python中元组比较会按顺序逐个元素对比,完全符合
arr1 > arr2 > arr3的优先级规则——先比较arr1对应的索引,相同则比较arr2,最后比较arr3。
内容的提问来源于stack exchange,提问作者StaticName
相关产品推荐
相关产品推荐

