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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 23:36:04