如何根据数组键对哈希键进行排序?

Col*_*bri 2 ruby

有一个哈希的例子:

h1 = {
  a1: :a2,
  b1: :b2,
  c1: :c2,
  d1: :d2,
  e1: :e2,
  f1: :f2
}
Run Code Online (Sandbox Code Playgroud)

并且有这样一个键数组:

a1 = [:b1, :d1, :f1]
Run Code Online (Sandbox Code Playgroud)

如何根据数组对这个哈希的键进行排序?不在数组中的哈希键必须按其原来的顺序位于已排序的哈希键之后。

结果:

{
  b1: :b2,
  d1: :d2,
  f1: :f2,
  a1: :a2,
  c1: :c2,
  e1: :e2
}
Run Code Online (Sandbox Code Playgroud)

spi*_*ann 7

我会这样做:

h1.slice(*a1).merge(h1.except(*a1))
#=> {:b1=>:b2, :d1=>:d2, :f1=>:f2, :a1=>:a2, :c1=>:c2, :e1=>:e2}
Run Code Online (Sandbox Code Playgroud)

Hash#sliceh1按照 中定义的顺序返回元素a1。并Hash#except归还失踪的人。并将Hash#merge这两个组合并为一个散列。