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

kyxcudwk  于 2023-05-17  发布在  Ruby
关注(0)|答案(2)|浏览(191)

这里有一个hash的例子:

h1 = {
  a1: :a2,
  b1: :b2,
  c1: :c2,
  d1: :d2,
  e1: :e2,
  f1: :f2
}

有这样一组键:

a1 = [:b1, :d1, :f1]

如何根据数组对该哈希的键进行排序?不在数组中的散列键必须按照它们的顺序排在排序键之后。
结果:

{
  b1: :b2,
  d1: :d2,
  f1: :f2,
  a1: :a2,
  c1: :c2,
  e1: :e2
}
m4pnthwp

m4pnthwp1#

我会这样做:

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

Hash#slice按照a1中定义的顺序返回h1中的元素。而Hash#except返回丢失的。Hash#merge将两个组合并为一个散列。

qacovj5a

qacovj5a2#

你可以写信

h1.slice(*a1, *(h1.keys - a1))

h1.slice(*a1, *h1.keys)

两个都返回

{:b1=>:b2, :d1=>:d2, :f1=>:f2, :a1=>:a2, :c1=>:c2, :e1=>:e2}

请参见Hash#slice。

相关问题