Ruby on Rails - 如何按特定顺序排列数组元素

时间:2015-02-09 16:52:38

标签: ruby-on-rails ruby arrays ruby-on-rails-2 ruby-1.8.7

我的数组是:

[{: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

由于

2 个答案:

答案 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与蒸汽机一起出去了。