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

Ruby:按指定数组顺序排序哈希数组 未匹配id元素后置

Ruby 按指定id顺序排序哈希数组实现

核心逻辑

  • 先把参考顺序数组my_array转成「id值 => 排序下标」的哈希表,后续查排序位置的时间复杂度是O(1),比反复遍历数组找下标性能好很多
  • 排序时给每个哈希对象计算排序权重:如果id在参考顺序里,就用对应的下标作为权重;不在参考顺序里的id,统一给一个大于所有合法下标的权重(直接取my_array的长度即可,因为合法下标范围是0到my_array.length - 1),这类元素自然会被排到结果末尾
  • 不存在于参考顺序里的元素,互相之间会保持原数组的相对顺序,符合常规排序预期

可直接运行的代码

my_array = [4, 2, 5, 3, 1]
hash_list = [
  {"id" => 1, "field_name" => "foo"},
  {"id" => 2, "field_name" => "bar"},
  {"id" => 3, "field_name" => "abc"},
  {"id" => 4, "field_name" => "zsh"},
  {"id" => 5, "field_name" => "kql"},
  {"id" => 6, "field_name" => "plo"},
  {"id" => 7, "field_name" => "cde"}
]

# 构建id到排序位置的映射
id_index_map = my_array.each_with_index.to_h

# 执行排序
sorted_result = hash_list.sort_by { |item| id_index_map.fetch(item["id"], my_array.length) }

运行后sorted_result的输出和你给出的期望结果完全一致。

注意:Ruby里Hash是内置类名,不建议直接用hash作为变量名,容易引发命名冲突,上面示例把原哈希数组的变量名改成了hash_list,你可以根据自己的编码习惯调整。


内容的提问来源于stack exchange,提问作者arild tarland

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 04:33:25