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
不同,它不关心位置。您只能通过 Symbol
或 Key.
访问该值
所以,没有必要为所欲为。
正如其他人所说,使用 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是跟蒸汽机一起出的
我的数组是:
[{: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
不同,它不关心位置。您只能通过 Symbol
或 Key.
所以,没有必要为所欲为。
正如其他人所说,使用 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是跟蒸汽机一起出的