我需要按照另一个数组中键的顺序对哈希进行排序:
有没有一种方法可以用单行代码实现?
hash = { a: 23, b: 12 }
array = [:b, :a]
required_hash #=> { b: 12, a: 23 }
有没有一种方法可以用单行代码实现?
hash = { a: 23, b: 12 }
array = [:b, :a]
required_hash #=> { b: 12, a: 23 }
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}
array = [:b, :a]
{ a: 23, b: 12 }.sort_by { |k, _| array.index(k) }.to_h
#=> {:b=>12, :a=>23}
hash = { a:23, b:12 }
array = [:b, :a]
Hash[array.map{|e| [e, hash[e]]}]
关于排序,这是一段时间以前的事情了,当时Ruby更改了实现方式,使得哈希键按照插入顺序排序。(在此之前,无法保证键会按照某种方式进行排序)。
我没有看到任何排序,我认为你的做法基本上是这样的:
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}
a
和b
的值是什么? - sawa