首页 > 解决方案 > 基于键值数组重新排序 ruby​​ 中的哈希数组

问题描述

我有一个哈希数组。例如,

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]

如何以键的给定顺序(基于'order_arr')重新排序上述数组:id。

所以,结果应该如下:

[[{:id=> 65, :price=>20}, {:id=>65, :price=>23}, {:id=>65, :price=>60}],
  [{:id=>69, :price=>20}, {:id=>69, :price=>33}, {:id=>69, :price=>80}],
  [{:id=>61,:price=>20}, {:id=>61, :price=>23}, {:id=>61, :price=>60}]]

请帮忙

标签: arraysruby-on-railsrubyhash

解决方案


我使用您的索引对order_arr数组数组进行排序sort_by

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]
sorted_arr = arr.sort_by { |ary| order_arr.index(ary.first[:id]) }

pp sorted_arr

推荐阅读