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

Ruby on Rails - How to arrange elements of array in particular order

我的数组是:

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

谢谢

对于哈希,顺序无关紧要。你不需要那样做。相信我。

您使用的是 Hash,与 Array 不同,它不关心位置。您只能通过 SymbolKey.

访问该值

所以,没有必要为所欲为。

正如其他人所说,使用 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}] 

在Ruby2.0+中,可以这样写:

arr.map { |h| order.zip(h.values_at(*order)).to_h }

我还以为1.8.7是跟蒸汽机一起出的