我的数组是:
[{:age=>28, :name=>"John", :id=>1}, {:name=>"David", :age=>20, :id=>2}]
订单:
[:id, :name, :age] or ['id', 'name', 'age']
结果应为:
[{:id=>1, :name=>"John", :age=>28}, {:id=>2, :name=>"David", :age=>20}]
P / s:我使用的是Ruby 1.8.7和Rails 2.3.5
由于
答案 0 :(得分:2)
当涉及到哈希时,顺序并不重要。你不需要这样做。相信我。
您使用的是Hash
,与Array
不同,它不关心职位。您只能通过Symbol
或键访问该值。
所以,没有必要做你想做的事。
答案 1 :(得分:1)
正如其他人所说,你不能用Ruby 1.87或之前做过。以下是使用Ruby 1.9 +的一种方法:
arr = [{:age=>28, :name=>"John", :id=>1}, {:name=>"David", :age=>20, :id=>2}]
order = [:id, :name, :age]
arr.map { |h| Hash[order.zip(h.values_at(*order))] }
#=> [{:id=>1, :name=>"John", :age=>28}, {:id=>2, :name=>"David", :age=>20}]
在Ruby 2.0+中,您可以写:
arr.map { |h| order.zip(h.values_at(*order)).to_h }
我认为1.8.7与蒸汽机一起出去了。