我需要根据其他数组中存在的键的顺序对哈希进行排序:
hash = { a: 23, b: 12 }
array = [:b, :a]
required_hash #=> { b: 12, a: 23 }
有没有办法单行呢?
答案 0 :(得分:7)
hash = { a: 23, b: 12 }
array = [:b, :a]
array.zip(hash.values_at(*array)).to_h
#=> {:b=>12, :a=>23}
步骤:
v = hash.values_at(*array)
#=> [12, 23]
a = array.zip(v)
#=> [[:b, 12], [[:a, 23]]
a.to_h
#=> {:b=>12, :a=>23}
答案 1 :(得分:4)
您可以尝试这样的事情:
cross_image
答案 2 :(得分:2)
如果
hash = { a:23, b:12 }
array = [:b, :a]
作为一个班轮:
Hash[array.map{|e| [e, hash[e]]}]
至于排序,这是前段时间,当ruby改变了根据插入顺序排序哈希键的实现。 (在此之前,无法保证密钥会以某种方式排序)。
答案 3 :(得分:1)
我没有看到任何排序,我认为你基本上是这样做的:
hash = { a:23, b:12 }
array = [:b, :a]
res = {}
array.each { |key| res[key] = hash[key] } && res # `&& res` is just syntax sugar to return result in single line
#=> {:b=>12, :a=>23}