根据数组中相同键的顺序对哈希键进行排序

Abh*_*hek 2 ruby

我需要根据其他数组中的键的顺序对Hash进行排序:

hash = { a: 23, b: 12 }
array = [:b, :a]
required_hash #=> { b: 12, a: 23 } 
Run Code Online (Sandbox Code Playgroud)

有没有办法在单行中做到这一点?

Car*_*and 7

hash = { a: 23, b: 12 }
array = [:b, :a]

array.zip(hash.values_at(*array)).to_h
  #=> {:b=>12, :a=>23}
Run Code Online (Sandbox Code Playgroud)

步骤:

v = hash.values_at(*array)
  #=> [12, 23]
a = array.zip(v) 
  #=> [[:b, 12], [[:a, 23]]
a.to_h
  #=> {:b=>12, :a=>23}
Run Code Online (Sandbox Code Playgroud)


Ily*_*lya 5

你可以尝试这样的事情:

array = [:b, :a] 
{ a: 23, b: 12 }.sort_by { |k, _| array.index(k) }.to_h
#=> {:b=>12, :a=>23}
Run Code Online (Sandbox Code Playgroud)