Ruby中如何基于指定id顺序数组重排嵌套哈希的二维数组?
实现方案
你可以直接利用Ruby的sort_by方法实现排序,两种可选方案如下:
方案1:轻量场景直接排序
如果你的数据量不大,直接用order_arr.index获取id对应的排序权重即可:
arr =[[{:id=>61,:price=>20}, {:id=>61, :price=>23}, {:id=>61, :price=>60}], [{:id=>65, :price=>20}, {:id=>65, :price=>23}, {:id=>65, :price=>60}], [{:id=>69, :price=>20}, {:id=>69, :price=>33}, {:id=>69, :price=>80}]] order_arr = [65,69,61] # 核心排序逻辑 result = arr.sort_by { |sub_arr| order_arr.index(sub_arr.first[:id]) }
因为每个子数组内所有哈希的id完全一致,直接取子数组第一个元素的id即可匹配排序规则,执行后得到的result就是你要的目标结果。
方案2:大数据量优化方案
如果order_arr长度很长,每次调用index查询的时间复杂度是O(n),可以预先建立id到排序权重的映射,把排序的时间复杂度降到O(1):
# 预先构建id和排序位置的映射关系 order_index = order_arr.each_with_index.to_h # 按映射权重排序 result = arr.sort_by { |sub_arr| order_index[sub_arr.first[:id]] }
内容的提问来源于stack exchange,提问作者jissy
相关产品推荐
相关产品推荐

