使用自定义顺序对数组排序

时间:2014-03-14 11:01:12

标签: ruby ruby-on-rails-3

我有一组id命令说

order = [5,2,8,6]

和另一个哈希数组

 [{id: 2,name: name2},{id: 5,name: name5}, {id: 6,name: name6}, {id: 8,name: name8}]   

我希望它排序为

[{id: 5,name: name5},{id: 2,name: name2}, {id: 8,name: name8}, {id: 6,name: name6}] 

实现这一目标的最佳方法是什么?我可以实现这一点,迭代两者并将其推送到新阵列但寻找更好的解决方案。

1 个答案:

答案 0 :(得分:7)

试试这个

arr = [  
         {:id=>2, :name=>"name2"}, {:id=>5, :name=>"name5"}, 
         {:id=>6, :name=>"name6"}, {:id=>8, :name=>"name8"}
      ]

order = [5,2,8,6]

arr.sort_by { |a| order.index(a[:id]) }
# => [{:id=>5, :name=>"name5"}, {:id=>2, :name=>"name2"}, 
#{:id=>8, :name=>"name8"}, {:id=>6, :name=>"name6"}]