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

Ruby on rails RubyonRails-如何按特定顺序排列数组元素,ruby-on-rails,ruby,arrays,ruby-on-rails-2,ruby-1.8.7,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:我

我的阵列是:

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


谢谢

对于散列,顺序并不重要。你不需要那样做。相信我

您使用的是一个
散列
,与
数组
不同,它不关心位置。只能通过
符号
或键访问该值


因此,不需要做你想做的事情。

对于散列,顺序并不重要。你不需要那样做。相信我

您使用的是一个
散列
,与
数组
不同,它不关心位置。只能通过
符号
或键访问该值


因此,不需要做你想做的事情。

对于散列,顺序并不重要。你不需要那样做。相信我

您使用的是一个
散列
,与
数组
不同,它不关心位置。只能通过
符号
或键访问该值


因此,不需要做你想做的事情。

对于散列,顺序并不重要。你不需要那样做。相信我

您使用的是一个
散列
,与
数组
不同,它不关心位置。只能通过
符号
或键访问该值


因此,没有必要做你想做的事。

正如其他人所说,你不能用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与蒸汽机一起推出。

正如其他人所说,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与蒸汽机一起推出。

正如其他人所说,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与蒸汽机一起推出。

正如其他人所说,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是蒸汽机的产物。

顺序不在哈希表中维护,对于Ruby 1.8.7,如果你想要有序哈希表,你需要升级到Ruby 1.9+。顺序不在哈希表中维护,对于Ruby 1.8.7,如果你想要有序哈希表,你需要升级到Ruby 1.9+。顺序不在哈希表中维护,对于Ruby 1.8.7,如果您想要有序散列,您需要升级到Ruby 1.9+。散列中不维护顺序,对于Ruby 1.8.7,如果您想要有序散列,您需要升级到Ruby 1.9+。OP明确要求对数组进行排序,您正在谈论散列。如果您阅读问题,OP显然也在谈论散列。@chrishald是的,我把一个问题误读为“按散列值对数组排序”。我很抱歉。我不同意。我充分利用了Ruby在v中对键插入顺序的维护。1.9+.OP明确要求对数组进行排序,您正在谈论散列。如果您阅读该问题,OP显然也在谈论散列。@ChrisHeald是的,我将一个问题误读为“按散列值对数组进行排序”。我很抱歉。我不同意您的看法。我充分利用了Ruby在v中对键插入顺序的维护。1.9+.OP明确要求对数组进行排序,您正在谈论散列。如果您阅读该问题,OP显然也在谈论散列。@ChrisHeald是的,我将一个问题误读为“按散列值对数组进行排序”。我很抱歉。我不同意您的看法。我充分利用了Ruby在v中对键插入顺序的维护。1.9+.OP明确要求对数组进行排序,您正在谈论散列。如果您阅读该问题,OP显然也在谈论散列。@ChrisHeald是的,我将一个问题误读为“按散列值对数组进行排序”。我很抱歉。我不同意您的看法。我充分利用了Ruby在v中对键插入顺序的维护。1.9+.