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+.