给出另一个散列的散列,包括有关order方法的信息

我正在使用Ruby on Rails 3.0.7,我想通过返回排序array甚至是新排序的hash考虑预设顺序对hash进行排序。 也就是说,给定以下hash ,例如HASH1(我认为它的值表示从1到4的顺序方法)

 { :dog => 3, :cat => 2, :pig => 4, :frog => 1 } 

我想通过考虑HASH1值中给出的顺序,按键来解释另一个hash ,比如HASH2

 { :cat => 'cat_value', :dog => 'dog_value', :frog => 'frog_value', :pig => 'pig_value' } 

所以,在上面的例子中,我应该输出如下的输出\有序hash

 { :frog => 'frog_value', # Order indicated by ':frog => 1' in the HASH1 :cat => 'cat_value', # Order indicated by ':cat => 2' in the HASH1 :dog => 'dog_value', # Order indicated by ':dog => 3' in the HASH1 :pig => 'pig_value' # Order indicated by ':pig => 4' in the HASH1 } 

要么

 [ ["frog", 'frog_value'], # Order indicated by ':frog => 1' in the HASH1 ["cat", 'cat_value'], # Order indicated by ':cat => 2' in the HASH1 ["dog", 'dog_value'], # Order indicated by ':dog => 3' in the HASH1 ["pig", 'pig_value'] # Order indicated by ':pig => 4' in the HASH1 ] 

我怎样才能做到这一点?

使用Hash#sort_by

 hash = { :cat => [2], :frog => [1], :pig => [4], :dog => [3] } order = { :dog => 3, :cat => 2, :pig => 4, :frog => 1 } # array of k, v pairs p sorted_array = hash.sort_by {|k, v| order[k]} p sorted_hash = Hash[sorted_array] 

产量

 [[:frog, [1]], [:cat, [2]], [:dog, [3]], [:pig, [4]]] {:frog=>[1], :cat=>[2], :dog=>[3], :pig=>[4]}